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



Последнее исправление: anonimous (всего исправлений: 2)

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

var i,s
s="here is a string"
i=0
/[a-z]/g.exec(s)
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
() автор топика
Ответ на: комментарий от Deleted

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

anonimous
() автор топика

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

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

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

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

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

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

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

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

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

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

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

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

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

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
()
Ответ на: комментарий от umren

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

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

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

anonymous
()

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

anonymous
()

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

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

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

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