LINUX.ORG.RU

Точка с запятой в JS

 ,


1

2

Всем известно, что точка с запятой в 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 Анон подсказал, что еще квадратная скобка и слеш. итого, 3 случая, не считая первого: круглая скобка, квадратная скобка и слеш.

Вот еще случай неоднозначности (слэш):

var i,s
s="here is a string"
i=0
/[a-z]/g.exec(s)
anonymous ()

Ну и открывающая квадратная скобка тоже.

anonymous ()

Douglas Crockford, a leading expert in JavaScript recommends using semicolons at the end of every simple statement and his ubiqitious JavaScript code quality tool, JSLint, by default expects semicolons to be inserted. A poll on Stack Overflow strongly recommends using semicolons everywhere.

anonymous ()

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

Но зачем? Гораздо читабельнее получится, если ты будешь ставить точку с запятой в конце строки. Или тебе так важно выделиться из серой массы?

Deleted ()
Ответ на: комментарий от Deleted

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

anonimous ()
Ответ на: комментарий от anonimous

Тебе так принципиально не ставить точку с запятой в общем случае?

Deleted ()
Ответ на: комментарий от Deleted

Не принципиально, но я не ставлю. Просто глупо, если из тысячи строк она нужна только в 3-4.

anonimous ()

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

Знаешь почему советуют? когда твой js код пропустят через компрессор, то твой код сломается и будет не рабочим, а весь js код идет в компрессор, так то.

з.ы. дальше не читал, автору срочно идти на работу.

umren ★★★★★ ()
Последнее исправление: umren (всего исправлений: 1)
Ответ на: комментарий от umren

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

anonimous ()
Ответ на: комментарий от anonimous

можно и троллейбус из булки хлеба сделать. А можно и просто ставить точки с запятой.

Deleted ()
Ответ на: комментарий от Deleted

Да, ИЧСХ, принято делать правильные вещи, так, например, если стоматолог дергает зуб, он обычно предпочитает делать это через ротовую полость, хотя можно и через жопу.

anonimous ()
Ответ на: комментарий от anonimous

Вот! Кажется, ты начинаешь понимать! То, что ты делаешь сейчас — предлагаешь дёргать именно через жопу.

Deleted ()
Ответ на: комментарий от Deleted

Автоматизация vs ручной труд. Где тут чрезжопность, каждый определяет сам.

anonimous ()
Ответ на: комментарий от anonimous

а они должны делать это сами? анализировать и ставить синтаксические элементы в твоем коде? это не их работа, unix-way же.

umren ★★★★★ ()
Ответ на: комментарий от umren

Да там анализ никакой не нужен. Просто подстановка в конце каждой строки, или замена \n на ;

anonimous ()
Ответ на: комментарий от anonimous

Я бы не доверял такому компрессору который трогает мой код.

umren ★★★★★ ()

если простота и читаемость кода это для дебилов, то ok. это не вопрос, не нужно отвечать на это сообщение.

quest ★★★★ ()

За постинг в development этому товарищу скор снимать снимать надо. Запилите фичу в лорсорс.

anonymous ()

Не могу апдейтить, поэтому оставлю здесь. Арифметические операции, по ходу, туда же

var a = 1, b = 0
	if(a>b) a=b
	-b > 0 

a//false

anonimous ()
Ответ на: комментарий от umren

Я бы не доверял такому компрессору который трогает мой код.

Компиляторов боишься поди? Кто пустил луддита за компьютер?

Kuzy ★★★ ()

По-моему я уже видел такой топик. ОП потом ещё кучу таких же на создавал и учил всех жс. Забанили потом насколько емнип.

Я такую конструкцию очень часто встречаю, угадайте как парсится:

var obj = {
    ...
}

(function () {
    ...
})()

Kalashnikov ★★★ ()
Ответ на: комментарий от umren

Я бы не доверял такому компрессору который трогает мой код.

Я бы не доверял компрессору, который из валидного js делает тыкву.

anonymous ()
Ответ на: комментарий от anonymous

убирая пробелы? значит не валидный js :)

umren ★★★★★ ()
Ответ на: комментарий от umren

значит не валидный js

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

А твой «убиратель пробелов» как раз и корежит код.

anonymous ()

Внезапно, ты всё правильно делаешь. ТЗ в жабкоскрипте не нужны.

anonymous ()

Все ставят точку с запятой и ты ставь. В JavaScript так принято.

Legioner ★★★★★ ()
Ответ на: комментарий от Kalashnikov

А что тут удивительного? Я об этом в стартовом посте написал.

anonimous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.