Использование точек с запятой в JavaScript – один из самых горячо обсуждаемых топиков (сразу после пробелов и табов… два пробела, пожалуйста). Вот с ходу три ссылки, почему точки с запятой не нужны. Но так ли это на самом деле?
Самое первое, что вы должны знать про точки с запятыми, это такая штука как “Automatic Semicolon Insertion (ASI)”. Это та фича, которая, собственно, и позволяет обсуждать нужность или ненужность точек с запятыми. Прочитайте о ней, если еще этого не сделали. Как и Кайл (пост), я считаю, что не стоит доверять ASI. Это не очень хорошая идея, по многим причинам.
Проблема со сложной логикой ASI исчезает, как только вы начинаете использовать транспайлер или минификатор. Например, Babel и UglifyJS2 автоматически добавляют точку с запятой в генерируемый код.
Когда мне говорят, что точки с запятой можно не писать, я соглашаюсь – до тех пор, пока ребята уверены, что во время деплоя эти точки с запятой будут возвращены обратно.
В логике работы ASI есть несколько очень неприятных моментов. Но до тех пор, пока вы используете ESLint с ключем no-unexpected-multiline, вы в безопасности. Достаточно убедиться, что ваша система сборки не соберет проект, если кто-то из разработчиков нарушил правило. Также, возможно, вас заинтересует еще одно правило, semi.
С учетом вышесказанного, теперь не нужно обсуждать, в каких случаях точки с запятой использовать можно, а в каких нельзя. Теперь это дело вкуса разработчика.
Почему я предпочитаю не использовать точки с запятыми? Не потому, что у меня сломан правый мизинец. И не потому, что мне так нравится печатать на один символ меньше. Все дело в том, что я не хочу, чтобы мой редактор и линтер говорили мне, что нужно вставлять в текст что-то, что на самом деле не нужно (так что я сказал им, что не хочу точки с запятыми – и теперь они, наоборот, предупреждают меня, когда точки с запятыми все-таки оказываются в моей программе).
Также, когда я пишу код, я предпочитаю фокусироваться на проблеме. И чтобы меня не отвлекала от нее необходимость добавлять что-то, что к ней отношения не имеет. После того, как я начал игнорировать точки с запятой (и привык к тому, как «ужасно» поначалу выглядел код), я воспринимаю свой код как более «чистый».
В своем посте Kyle обсуждает не только ASI, но и собственные предпочтения относительно использования точек с запятой. Настоятельно рекомендую почитать.
На мой взгляд, в сказанном Kyle важно то, что он считает точку с запятой залогом более «однозначного» и читаемого кода. Особенно для начинающих разработчиков. Возможно, это так, но для меня код не стал менее однозначным или читаемым после того, как я отказался от точек с запятыми. И теперь я о них даже не задумываюсь.
Если вы не используете транспайлер/линтер, то настоятельно не рекомендую вам отказываться от точек с запятыми (в этом случае речь не идет о личных предпочтениях — это будет просто правильное использование JavaScript). Я настоятельно рекомендую использовать либо транспайлер, либо линтер, либо и то и другое вместе. В таком случае вы сможете использовать или не использовать точки с запятой, и это будет только ваше предпочтение – код не пострадает ни в том, ни в другом случае. До встречи в твиттере!
Transpilation и Uglification
Самое первое, что вы должны знать про точки с запятыми, это такая штука как “Automatic Semicolon Insertion (ASI)”. Это та фича, которая, собственно, и позволяет обсуждать нужность или ненужность точек с запятыми. Прочитайте о ней, если еще этого не сделали. Как и Кайл (пост), я считаю, что не стоит доверять ASI. Это не очень хорошая идея, по многим причинам.
Проблема со сложной логикой ASI исчезает, как только вы начинаете использовать транспайлер или минификатор. Например, Babel и UglifyJS2 автоматически добавляют точку с запятой в генерируемый код.
Когда мне говорят, что точки с запятой можно не писать, я соглашаюсь – до тех пор, пока ребята уверены, что во время деплоя эти точки с запятой будут возвращены обратно.
Linting the bad parts (непереводимая игра слов)
В логике работы ASI есть несколько очень неприятных моментов. Но до тех пор, пока вы используете ESLint с ключем no-unexpected-multiline, вы в безопасности. Достаточно убедиться, что ваша система сборки не соберет проект, если кто-то из разработчиков нарушил правило. Также, возможно, вас заинтересует еще одно правило, semi.
Зачем вообще отказываться от точек с запятой?
С учетом вышесказанного, теперь не нужно обсуждать, в каких случаях точки с запятой использовать можно, а в каких нельзя. Теперь это дело вкуса разработчика.
Ставить или не ставить точки с запятой – личное предпочтение
Почему я предпочитаю не использовать точки с запятыми? Не потому, что у меня сломан правый мизинец. И не потому, что мне так нравится печатать на один символ меньше. Все дело в том, что я не хочу, чтобы мой редактор и линтер говорили мне, что нужно вставлять в текст что-то, что на самом деле не нужно (так что я сказал им, что не хочу точки с запятыми – и теперь они, наоборот, предупреждают меня, когда точки с запятыми все-таки оказываются в моей программе).
Также, когда я пишу код, я предпочитаю фокусироваться на проблеме. И чтобы меня не отвлекала от нее необходимость добавлять что-то, что к ней отношения не имеет. После того, как я начал игнорировать точки с запятой (и привык к тому, как «ужасно» поначалу выглядел код), я воспринимаю свой код как более «чистый».
Причины использовать точку с запятой?
В своем посте Kyle обсуждает не только ASI, но и собственные предпочтения относительно использования точек с запятой. Настоятельно рекомендую почитать.
На мой взгляд, в сказанном Kyle важно то, что он считает точку с запятой залогом более «однозначного» и читаемого кода. Особенно для начинающих разработчиков. Возможно, это так, но для меня код не стал менее однозначным или читаемым после того, как я отказался от точек с запятыми. И теперь я о них даже не задумываюсь.
Выводы
Если вы не используете транспайлер/линтер, то настоятельно не рекомендую вам отказываться от точек с запятыми (в этом случае речь не идет о личных предпочтениях — это будет просто правильное использование JavaScript). Я настоятельно рекомендую использовать либо транспайлер, либо линтер, либо и то и другое вместе. В таком случае вы сможете использовать или не использовать точки с запятой, и это будет только ваше предпочтение – код не пострадает ни в том, ни в другом случае. До встречи в твиттере!