Пишу о программировании, книгах, науке и жизни

Точка с запятой

22 октября 2015, 1:24

Цитата неизвестного:

Существуют языки программирования, которые прекрасно обходятся без точки с запятой.

Точка с запятой — недосимвол. Это синтаксическая соль, дублирование символов конца строки. Сама по себе она заканчивает оператор, но с тем же успехом эту функцию могли бы выполнять символы конца строки. Использование точек с запятой везде — насилие над программистом.

Точка с запятой впервые появилась в Алголе‐58, во времена, когда символы переноса строки и возврата каретки считались несущественными и можно было лепить исходный код в однострочную нечитаемую мешанину. Однако же другие языки программирования прекрасно выживают без точек с запятой, им нет нужды дублировать символы конца строки, которые итак вставляет любой текстовый редактор по нажатию на Enter.

Все аргументы защитников повсеместного применения точек с запятой сводятся к тому, что так принято, так все привыкли, это архаизм древних языков 1958 года, который «невозможно» отменить. Мало того, в большинстве си‐подобных языков эта идиома намеренно введена в синтаксис и стандарт как обязательная. Теперь программист всегда должен выполнять лишнюю работу и ставить этот символ перед тем, как нажать на Enter.

Трудность даже не в том, что приходится каждый раз в конце строки ставить точку с запятой, эту задачу вполне могла бы решать интегрированная среда разработки или препроцессор. Трудность в том, что поставленная точка с запятой перед или после некоторых символов (например, «{», «}» в си или операторов «End» в паскалях) вызывает ошибку компиляции. В каком‐то месте кода точка с запятой обязательна, в каком‐то её можно опустить, а в каком‐то месте её вдруг ставить вообще нельзя — логику такого непоследовательного поведения объяснить невозможно, это можно только зазубрить.

Современные компиляторы вполне справляются с листингом, где для конца строк используются только два символа (с кодами 10 и 13), а не три, как в си и производных от него языках. Простой пример.
На VB.Net можно написать вот так:
Dim f = 32 / 4
Dim g = 25 / 5
Или вот так
Dim f =
32 / 4
Dim g = 25 / 5
Всё это будет валидным кодом. Компилятор сам умеет определять, является ли конец строки также и окончанием оператора, а если оператор не закончен на текущей строке, то он будет поглощать выражение из следующей строки.

Увы, в си такое поведение компилятора просто невозможно, потому что стандарт обязывает всегда указывать конец оператора, даже если он совпадает с концом строки.

Поделиться
Популярное