Необходимость использования точки запятой в JavaScript и ему подобных языках это предмет горячих обсуждений. Олег Борисенков в своей статье на tproger.ru разобрал все плюсы и минусы использования точки с запятой.
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 полностью не избавляет от неоднозначных ситуаций.
[customscript]techrocks_custom_after_post_html[/customscript]
[customscript]techrocks_custom_script[/customscript]