Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Нужно ли ставить ; в JS? (https://javascript.ru/forum/misc/33788-nuzhno-li-stavit-%3B-v-js.html)

Shitbox2 08.12.2012 13:30

Нужно ли ставить ; в JS?
 
JS работает и без ; в конце строки и лично мне удобнее их вовсе не ставить, но есть подозрения, что многие оптимизаторы кода заглохнут из-за этого. Опасения оправданы?

Ну и в дополнение, какой оптимизатор посоветуете? Есть ли он онлайн?

schmetterling 08.12.2012 13:37

Цитата:

Сообщение от Shitbox2
есть подозрения, что многие оптимизаторы кода заглохнут из-за этого. Опасения оправданы?

Да, те, которые regExp-ами удалят лишние пробелы. Там даже не сами оптимизаторы заглохнут, а ваш код после них.

Ставьте точки с запятой только после тех строк, что не оканчиваются на фигурную закрывающую скобку.

Посоветую Google Closure Compiler.

Gvozd 08.12.2012 13:46

Цитата:

Сообщение от Shitbox2
лично мне удобнее их вовсе не ставить

за неделю написания кода с точками с запятой, легко можно приобрести эту полезную привычку.
А полезная она в первую очередь в плане читаемости и поддерживаемости кода другими программистами.
Именно поэтому все крупные проекты на JS написаны именно с точкой с запятой.
Некоторые проекты обычно идут дальше, и валидируют свой код через JSHINT/JSLINT, что позволяет вычистить код от потенциальных ляпов, и неоднозначных моментов, вплоть стандарта форматирования кода

Shitbox2 08.12.2012 15:37

Не поверите, но навыки форматирования кода я перенял из twitter bootstrap, хотя там JSHINT тоже используется...

dmitriymar 08.12.2012 15:51

Цитата:

Сообщение от Shitbox2
Не поверите, но навыки форматирования кода я перенял из twitter bootstrap, хотя там JSHINT тоже используется...

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

tenshi 08.12.2012 19:19

> многие оптимизаторы кода заглохнут из-за этого. Опасения оправданы?

нет. а вообще - взял бы и проверил.

> А так же интерприиатор тратит время на авторасстановку.

не знаю как интерприиаторы, а интерпретаторы ничем таким не занимаются.

> (function(){ /*код*/ })()

void function(){ /*код*/ }()

> А полезная она в первую очередь в плане читаемости и поддерживаемости кода другими программистами.

никакой особой читаемости оно не добавляет. только лишняя пунктуация.

dmitriymar 08.12.2012 19:23

Цитата:

Сообщение от tenshi
> А так же интерприиатор тратит время на авторасстановку.
не знаю как интерприиаторы, а интерпретаторы ничем таким не занимаются.

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

tenshi 08.12.2012 20:06

яваскрипт интерпретируется не построчно, а сначала разбивается на лексемы лексером, потом парсером создаётся иерархическое дерево, и оно уже "интерпретируется". парсер - это конечный автомат, который последовательно анализирует лексемы и на основе их типа - помещает её в ту или иную часть дерева. лексема ";" точно также завершает текущее выражение как и например лексема "var", так что вывод - парсер тратит дополнительное время на обработку лишней лексемы ";". но всё это такие мелочи..

http://habrahabr.ru/post/136860/

BallsShaped 08.12.2012 20:07

У меня в пятницу как раз была проблема из-за того, что забыл поставить ; после функции. В результате посли сжатия получилось что-то вроде этого:
... = function (){ ... }(function(){ ... })

Причем проблема была в том, что это не вызывало никаких ошибок, просто пропала часть функционала:)

tenshi 08.12.2012 20:19

> У меня в пятницу как раз была проблема из-за того, что забыл поставить ;

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


Часовой пояс GMT +3, время: 04:09.