Зачем нужна точка с запятой в программировании

Зачем нужна точка с запятой в программировании

И всегда ли она нужна?

Продолжаем разбирать неочевидные моменты в программировании. В прошлый раз мы рассказали про разницу между табами и пробелами. Теперь — о точках с запятой: зачем они нужны и когда не нужны. 

Зачем нужна точка с запятой

В большинстве языков программирования точка с запятой разделяет команды. Компьютер сам этого сделать не может, ему нужно явно сказать: «Всё, вот это — вся команда, выполняй её в таком виде». 

В некоторых языках вместо точки с запятой используют перенос на новую строку; иногда интерпретатор языка умеет угадывать, где вы имели в виду точку с запятой; но в базе точка с запятой — самый популярный разделитель. 

На примере: почему важно разделять команды

В большинстве случаев, если не разделить команды, компилятор или интерпретатор просто сообщат об ошибке: мол, ожидали конец команды, а ты нам ерунду какую-то подсунул. Но иногда ошибки не будет, хотя программа будет работать совсем не так, как имел в виду разработчик. Это похоже на расстановку запятых в предложении «Казнить нельзя помиловать». Вот пример. 

В C++ есть команда автоинкремента после обращения. Она выглядит как два плюса подряд, и её можно поставить до или после переменной. Место расположения переменной важно: в зависимости от него алгоритм автоинкремента будет работать по-разному. 

Вот пример: j = i++. Предположим, что в переменной i находится число 2. Работать будет так:

  1. Компьютер берёт значение переменной i и отправляет его в переменную j.
  2. После присваивания компьютер увеличивает значение переменной i на единицу.
  3. По итогу в переменной j число 2, в переменной i число 3. 

Обратный пример: j = ++i (то есть переместили автоинкремент до переменной). Теперь он работает так: 

  1. Компьютер сначала увеличивает i на единицу.
  2. После увеличения он присваивает новое значение в J.
  3. По итогу в переменных i и j число 3. 

Теперь представьте, что у нас вот такой кусок кода: 

z = x
++y -= 2

Для компьютера этот кусок выглядит так, потому что в этом языке ему плевать на переносы строк и пробелы: 

z=x++y-=2

Из этого кода не очевидно, к какой переменной относится оператор ++. Компьютер либо выполнит какое-то стандартное действие для таких случаев, либо выбросит ошибку. 

Чтобы стало очевидно, нужно просто разделить команды точкой с запятой: 

z=x++;y-=2

На самом деле, вместо точки с запятой мог бы быть любой другой символ, например знак параграфа — §. Но разработчикам языков программирования было удобнее ставить то, что есть на любой клавиатуре, и то, что несложно набрать одним пальцем.

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

Чаще всего в проектах мы используем JavaScript, в котором точка с запятой тоже разделяет команды:

a = 3;
b = 5;
c = a + b;
console.log(c);
Зачем нужна точка с запятой в программировании

Но если мы возьмём тот же код, уберём оттуда точки с запятой и выполним его в браузере, то ошибки почему-то тоже не будет:

a = 3
b = 5
c = a + b
console.log(c)
Зачем нужна точка с запятой в программировании

Дело в том, что в JavaScript есть встроенный механизм автоматической вставки точек с запятой, который называется ASI. Он распознаёт команды и сам добавляет разделители в нужных местах. Этот механизм справляется с большинством случаев, но иногда он тоже не понимает, где ставить точку с запятой. 

Например, с этим алгоритм точно не справится:

a = b + c
(d + e).print()

Дело в том, что это необязательно сложение и вызов какого-то метода второй командой — ещё это может быть вызовом метода print() функции c с аргументом (d + e):

a = b + c(d + e).print()

Компьютер не знает, что именно мы имели в виду, поэтому здесь он остановится и выдаст ошибку.

Механизм ASI не значит, что в JavaScript не нужны точки с запятой. Скорее это значит, что разработчики JavaScript позаботились о вашем комфорте и постарались защитить от некоторых ошибок. Так-то точки с запятой нужны. 

В каких ещё языках есть точка с запятой

Точка с запятой есть в большинстве современных языков программирования, на которые повлияли C и C++:

  • Java,
  • Perl,
  • PHP,
  • C#,
  • Scala,
  • Pascal,
  • TypeScript.

Также она используется в языке запросов SQL. Иногда её используют для разделения данных внутри CSV-файлов — в них Excel может сохранять свои таблицы с данными (хотя CSV расшифровывается как comma-separated values, то есть «значения, разделённые запятой»).

Когда точка с запятой не нужна

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

Когда Python только появлялся, многие программисты по привычке ставили в нём точку с запятой. Разработчики решили научить язык не воспринимать это как ошибку, а просто игнорировать этот символ. При этом редактор кода подсветит точки с запятой красным, чтобы программист обратил на это внимание и убрал их из кода:

Зачем нужна точка с запятой в программировании
VS Code подсвечивает точки с запятой в коде задачи про длину подстроки

Комментарии

В совсем старых языках программирования, например в ассемблерах и Лиспе, точка с запятой используется для обозначения комментария в коде:

MOV AL, 61h       ; Отправляем в AL десятичное число 97 (61 в шестнадцатеричной системе)

В современных языках точку с запятой для комментариев не используют — вместо этого ставят решётку, слеш, звёздочки или угловые скобки.

Текст:

Михаил Полянин

Редактор:

Максим Ильяхов

Художник:

Алексей Сухов

Корректор:

Ирина Михеева

Вёрстка:

Кирилл Климентьев

Соцсети:

Виталий Вебер

Получите ИТ-профессию
В «Яндекс Практикуме» можно стать разработчиком, тестировщиком, аналитиком и менеджером цифровых продуктов. Первая часть обучения всегда бесплатная, чтобы попробовать и найти то, что вам по душе. Дальше — программы трудоустройства.
Начать карьеру в ИТ
Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию
Еще по теме
easy