Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Точка с запятой (https://javascript.ru/forum/misc/48263-tochka-s-zapyatojj.html)

foo 27.06.2014 09:13

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

Часто приводятся дебильные примеры, где все очевидно, например, ретурн

f=function(){
   return
   some
}

Эти примеры для идиотов. Лично я еще замечал, что ругань идет вот в таких случаях

1
(1+1)


Насколько я понимаю, парсер если видит на новой строке открывающуюся скобку, полагает по-дефолту, что это вызов функции, он тут орет, что 1 - это не функция. То есть, единственным случаем трактовки переноса строки не как разделителя, является вызов функции:

a=function(x){return x}
(1)
a//1

Я это решаю таким вот способом.

1
;(1+1)


По моим наблюдениям, это единственный случай неодназначности (ну, пример выше мы не будем считать, вещи подобного рода дебильно-очевидны, разница между expr x и expr; x)

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

Подытоживая:

1) для дебилов: выражение 1 и выражение 2 должно иметь разделитель, и не следует разделять <exp\ns1>. Примеры подоного рода, как, например, с return выше, мы не рассматриваем.

2) Вызов функции

Есть ли еще случаи?

UPD Выяснил еще 2 случая: квадратная скобка и слеш

Aetae 27.06.2014 12:58

Короткие записи условий и циклов ещё.
Вообще если на то пошло: точка с запятой нужна - не нужен перенос строки. Тогда не будет никаких неоднозначностей. Для языка и интерпретатора так гораздо лучше. А то что ты, жалкий органик, не способен работать с таким кодом - исключительно твои проблемы.)

WorM32 27.06.2014 13:07

Если выражаться языком автора, то необязательная точка с запятой как раз и была реализована для дебилов.

foo 27.06.2014 13:15

Цитата:

Сообщение от Aetae
Короткие записи условий и циклов ещё.

А можно пример? че-то не доходит, о чем речь.

Aetae 27.06.2014 13:39

var a = 1, b = 0
if(a>b) a=b
-b > 0 ? b=1 : b=2;
alert([a,b])
var a = 1, b = 0
if(a>b) a=b;
-b > 0 ? b=1 : b=2;
alert([a,b])


P.S. Есть языки(вт.ч. компилируемые в js) не только без точек с запятой но и без скобочек вообще, там вся суть в правильном кол-ве отсупов. Наверное это то что вам нужно. Лично меня от одного взгляда на подобное корёжит, мне важно, чтобы все скобочки и точки с запятой были всегда на месте, и как бы я не перетасовывал свой код, он продолжал работать.
Отступы и переносы строк - для меня исключительно форматирование и дело вкуса, точки с запятой, скобки итд - элементы языка. И мешать одно с другим мне видится противным.

foo 27.06.2014 14:34

Aetae,
Тут у тебя дело не в цикле. У тебя в первом примере a=false. Знак арифметической операции там отрабатывает.

Aetae 27.06.2014 19:48

foo, ясенхуй. Это к тому что следить придётся постоянно где стаить и не ставить, не только после функций. Впрочем читай выше моё отношение к перемешиванию форматирования и кода.

foo 27.06.2014 19:56

Цитата:

Сообщение от Aetae
следить придётся

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

foo 27.06.2014 20:06

Цитата:

Сообщение от Aetae
к перемешиванию форматирования и кода

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

DynkanMaclaud 14.11.2016 21:55

foo,
Статья на тему
исходник


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