- PVSM.RU - https://www.pvsm.ru -

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

Точка с запятой в JavaScript: на свой вкус - 1Использование точек с запятой в JavaScript – один из самых горячо обсуждаемых [1] топиков (сразу после пробелов и табов… два пробела, пожалуйста). Вот [2] с ходу три [3] ссылки [4], почему точки с запятой не нужны. Но так ли это на самом деле?

Transpilation и Uglification

Самое первое, что вы должны знать про точки с запятыми, это такая штука как “Automatic Semicolon Insertion (ASI)”. Это та фича, которая, собственно, и позволяет обсуждать нужность или ненужность точек с запятыми. Прочитайте о ней, если еще этого не сделали. Как и Кайл [5] (пост [6]), я считаю, что не стоит доверять ASI. Это не очень хорошая идея, по многим причинам.

Проблема со сложной логикой ASI исчезает, как только вы начинаете использовать транспайлер или минификатор. Например, Babel [7] и UglifyJS2 [8] автоматически добавляют точку с запятой в генерируемый код.

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

Linting the bad parts (непереводимая игра слов)

В логике работы ASI есть несколько очень неприятных моментов. Но до тех пор, пока вы используете ESLint с ключем no-unexpected-multiline [9], вы в безопасности. Достаточно убедиться, что ваша система сборки не соберет проект, если кто-то из разработчиков нарушил правило. Также, возможно, вас заинтересует еще одно правило, semi [10].

Зачем вообще отказываться от точек с запятой?

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

Ставить или не ставить точки с запятой – личное предпочтение

Почему я предпочитаю не использовать точки с запятыми? Не потому, что у меня сломан правый мизинец. И не потому, что мне так нравится печатать на один символ меньше. Все дело в том, что я не хочу, чтобы мой редактор и линтер говорили мне, что нужно вставлять в текст что-то, что на самом деле не нужно (так что я сказал им, что не хочу точки с запятыми – и теперь они, наоборот, предупреждают меня, когда точки с запятыми все-таки оказываются в моей программе).

Также, когда я пишу код, я предпочитаю фокусироваться на проблеме. И чтобы меня не отвлекала от нее необходимость добавлять что-то, что к ней отношения не имеет. После того, как я начал игнорировать точки с запятой (и привык к тому, как «ужасно» поначалу выглядел код), я воспринимаю свой код как более «чистый».

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

В своем посте [11] Kyle [5] обсуждает не только ASI, но и собственные предпочтения относительно использования точек с запятой. Настоятельно рекомендую почитать.

На мой взгляд, в сказанном Kyle важно то, что он считает точку с запятой залогом более «однозначного» и читаемого кода. Особенно для начинающих разработчиков. Возможно, это так, но для меня код не стал менее однозначным или читаемым после того, как я отказался от точек с запятыми. И теперь я о них даже не задумываюсь.

Выводы

Если вы не используете транспайлер/линтер, то настоятельно не рекомендую вам отказываться от точек с запятыми (в этом случае речь не идет о личных предпочтениях — это будет просто правильное использование JavaScript). Я настоятельно рекомендую использовать либо транспайлер, либо линтер, либо и то и другое вместе. В таком случае вы сможете использовать или не использовать точки с запятой, и это будет только ваше предпочтение – код не пострадает ни в том, ни в другом случае. До встречи в твиттере [12]!

Автор: Voximplant

Источник [13]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/javascript/120289

Ссылки в тексте:

[1] горячо обсуждаемых: https://en.wikipedia.org/wiki/Parkinson%27s_law_of_triviality

[2] Вот: http://blog.izs.me/post/2353458699/an-open-letter-to-javascript-leaders-regarding

[3] три: http://inimino.org/~inimino/blog/javascript_semicolons

[4] ссылки: https://www.youtube.com/watch?v=gsfbh17Ax9I

[5] Кайл: https://medium.com/u/5dccb9bb4625

[6] пост: http://blog.getify.com/not-all-semicolons/

[7] Babel: http://babeljs.io/

[8] UglifyJS2: https://github.com/mishoo/UglifyJS2

[9] no-unexpected-multiline: http://eslint.org/docs/rules/no-unexpected-multiline

[10] semi: http://eslint.org/docs/rules/semi

[11] своем посте: https://blog.getify.com/not-all-semicolons/

[12] твиттере: https://twitter.com/kentcdodds

[13] Источник: https://habrahabr.ru/post/283304/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best