Обложка: Точка с запятой в JavaScript/TypeScript: за и против

Точка с запятой в JavaScript/TypeScript: за и против

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

ASI (Автоматическая вставка точки с запятой)

Использование точки с запятой в JavaScript необязательно благодаря существованию ASI. TypeScript также использует ASI. Однако, ASI не всегда отрабатывает правильно, и есть несколько ситуаций, когда пропуск точки с запятой приведет к неожиданной ошибке выполнения.

В JavaScript есть несколько тупиковых случаев, которые устраняются системой типов TypeScript. Например:

class Car {
  color

  constructor(color) { 
    this.color = color  
  }

  beep() {
    console.log('BEEEEP')
  }
}
console.log("test") //; Без точки с запятой это не заработает
['white', 'blue'].forEach(color => (new Car(color)).beep())

Массив цветов будет интерпретирован как выражение с запятой. В JS это вызовет ошибку времени выполнения — «Uncaught TypeError: Cannot read property ‘blue’ of undefined»». В TS ошибка произойдет ещё на стадии компиляции — «Left side of comma operator is unused and has no side effects».

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

console.log("n")
(function() {
    console.log("n")
}())

Если вы пользуетесь линтером, то флаг no-unexpected-multiline позволит обнаружить такие ошибки на этапе компиляции.

Причины использовать точку с запятой

  • Привычка — зачем что-то менять, если и так всё устраивает.
  • Разные языки программирования — проще придерживаться схожих принципов на разных языках.
  • Читаемость — это дело вкуса.
  • Избавление от неоднозначностей.
  • Нежелание пользоваться линтером.

Причины не использовать точку с запятой

  • Лишний символ — экономия времени и места.
  • Код становится чище.
  • Легче попадать мышью в конец строки.
  • Линтер — позволяет выявлять ошибки на стадии компиляции.
  • Новичкам проще не отвлекаться на точку с запятой.
  • Больше никаких warning`ов об отсутствии точки с запятой (особенно при переходе с языка, который их не использует).
  • Использование точки с запятой в JavaScript и TypeScript полностью не избавляет от неоднозначных ситуаций.

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

А вы ставите точку с запятой?

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

Перейти к регистрации