Однажды я слышал, что оставлять фигурные скобки в однострочных операторах может быть вредно для JavaScript. Я больше не помню причины, и поиск в Google не сильно помог.
Есть ли что-нибудь, что делает хорошей идеей заключить все операторы в фигурные скобки в JavaScript?
Я спрашиваю, потому что все, кажется, делают это.
javascript
башня
источник
источник
Ответы:
нет
Но они рекомендуются. Если вы когда-нибудь расширите утверждение, они вам понадобятся.
Это совершенно верно
Тем не менее, настоятельно рекомендуется всегда использовать фигурные скобки, потому что если вы (или кто-то еще) когда-либо расширяете утверждение, это будет необходимо.
Та же самая практика следует во всех языках стиля синтаксиса C с креплением. C, C ++, Java и даже PHP поддерживают оператор одной строки без фигурных скобок. Вы должны понимать, что вы сохраняете только двух персонажей, а с помощью бодрящих стилей некоторых людей вы даже не сохраняете строки. Я предпочитаю полный стиль скобок (как следует), поэтому он имеет тенденцию быть немного длиннее. Компромисс очень хорошо сочетается с тем фактом, что у вас предельно четкая читаемость кода.
источник
Есть аспект читабельности - в том случае, когда у вас есть составные операторы, это может очень запутать. Отступ помогает, но ничего не значит для компилятора / интерпретатора.
И еще есть аспект расширяемости:
Мысль идет о том, что если у вас всегда есть скобки, то вы знаете, чтобы вставить другие операторы внутри этого блока.
источник
if (a===true) alert(a);
. Теперь понятно!Вопрос спрашивает об утверждениях в одну строку. Тем не менее, многие приведенные примеры показывают причины не пропускать скобки, основанные на многострочных операторах. Совершенно безопасно не использовать скобки в одной строке, если вы предпочитаете такой стиль кодирования.
Например, вопрос спрашивает, нормально ли это:
Он не спрашивает, нормально ли это:
Я думаю, что оставить скобки предпочтительнее, потому что это делает код более читабельным с менее избыточным синтаксисом.
Мой стиль кодирования - никогда не использовать скобки, если код не является блоком. И никогда не использовать несколько операторов в одной строке (разделенных точкой с запятой). Я нахожу это легко читаемым и понятным, и у меня никогда не возникало проблем с формулировками «если». В результате, использование скобок для одного оператора условия потребует 3 строки. Как это:
Использование одной строки, если оператор предпочтительнее, потому что он использует меньше вертикального пространства и код более компактен.
Я бы не заставлял других использовать этот метод, но он работает для меня, и я не мог не согласиться с приведенными примерами того, как отсутствие скобок приводит к ошибкам кодирования / определения области видимости.
источник
/*eslint curly: ["error", "multi"]*/
Технически нет, но в остальном абсолютно Да !!!
Забудьте о «Это личные предпочтения», «код будет работать нормально», «он работал нормально для меня», «он более читабелен» yada yada BS. Это может легко привести к очень серьезным проблемам, если вы допустите ошибку и поверите мне, что очень легко допустить ошибку, когда вы кодируете (не верьте ?, посмотрите известную ошибку Apple, которая может потерпеть неудачу ).
Аргумент: «Это личное предпочтение»
Нет это не так. Если только вы не команда из одного человека, уезжающая на Марс, нет. Большую часть времени будут другие люди, читающие / изменяющие ваш код. В любой серьезной команде программистов это будет рекомендуемый способ, поэтому это не «личное предпочтение».
Аргумент: «код будет работать нормально»
Так же как и код спагетти! Означает ли это, что это нормально, чтобы создать его?
Аргумент: «у меня все работало нормально»
В моей карьере я видел очень много ошибок, созданных из-за этой проблемы. Вы, вероятно, не помните, сколько раз вы комментировали
'DoSomething()'
и сбивали с толку, почему'SomethingElse()'
вызывается:Или добавил SomethingMore и не заметил, что он не будет вызываться (хотя отступ подразумевает иное):
Вот пример из жизни, который у меня был. Кто-то хотел отключить ведение журнала, чтобы запустить поиск и замену
"console.log"
=>//"console.log"
:Видишь проблему?
Даже если вы думаете, «это так тривиально, я бы никогда этого не сделал»; помните, что всегда будет член команды с более низкими навыками программирования, чем вы (надеюсь, вы не худший в команде!)
Аргумент: «это более читабельно»
Если я что-то узнал о программировании, так это то, что простые вещи очень быстро становятся очень сложными. Это очень часто, что это:
превращается в следующее после того, как оно было протестировано с другими браузерами / средами / вариантами использования или добавлены новые функции:
И сравните это с этим:
PS: Бонусные баллы идут тому, кто заметил ошибку в приведенном выше примере.
источник
Нет проблем с ремонтопригодностью!
Проблема со всеми вами в том, что вы ставите точки с запятой везде. Вам не нужны фигурные скобки для нескольких утверждений. Если вы хотите добавить заявление, просто используйте запятые.
Это правильный код, который будет работать так, как вы ожидаете!
источник
if
,else
и ,alert
а неIf
,Else
аAlert
?if
и(
, вроде быif(true) doSomething();
Нет необходимости программировать использование фигурных скобок в одной строке.
Это сводится только к предпочтениям кодеров и удобочитаемости.
Ваш код не сломается из-за этого.
источник
В дополнение к причине, упомянутой @Josh K (которая также относится к Java, C и т. Д.), Одной из особых проблем в JavaScript является автоматическая вставка точек с запятой . Из примера Википедии:
Таким образом, это также может привести к неожиданным результатам, если использовать его так:
Не намного лучше написать
но, может быть, здесь немного легче обнаружить ошибку (?)
источник
Это вопрос стиля, но фигурные скобки хороши для предотвращения возможного висяния других .
источник
Есть много хороших ответов, поэтому я не буду повторяться, за исключением того, чтобы сказать мое «правило», когда фигурные скобки могут быть опущены: при условии, что «возврат» или «выброс» (например,) в качестве их единственного утверждения . В этом случае управление потоком уже ясно, что оно заканчивается:
Даже «плохой случай» может быть быстро идентифицирован (и устранен) благодаря прекращению управления потоком. Это понятие / структура «правило» также относится к ряду языков.
Конечно, именно поэтому можно использовать линтер.
источник
Вот почему это рекомендуется
Допустим я пишу
Затем приходит следующий разработчик и говорит: «О, мне нужно сделать что-то еще», поэтому они пишут
Теперь, как вы видите, «Always» также всегда будет верным, потому что первый разработчик не использовал фигурные скобки.
источник
В настоящее время я работаю над миниатором. Даже сейчас я проверяю это на двух огромных сценариях. Экспериментально я выяснил: вы можете удалить фигурные скобки позади для if, else, while, функции *, если фигурные скобки не содержат ';', 'return', 'for', 'if', 'else', «а», «делать», «функция». Независимо от переноса строки.
Конечно, вам нужно заменить закрывающую скобку точкой с запятой, если за ней нет другой закрывающей скобки.
Функция не должна заканчиваться запятой.
Проверено на Chrome и FF.
источник
Всегда находил, что
легче на мой взгляд, чем
также условно, такие как
легче читать (мое личное мнение), чем
но я думаю, что все сводится к стилю кодирования
источник
Непосредственно не отвечая на вопрос, но ниже приведен краткий синтаксис, если условие в одной строке
Пример:
Можно написать так:
источник
Есть много проблем в JavaScript. Взгляните на JavaScript-архитектора Дугласа Крокфорда, который говорит об этом. С утверждением if все в порядке, но с оператором return может возникнуть проблема.
источник
Я нашел этот ответ в поисках аналогичного опыта, поэтому решил ответить на него своим опытом.
Операторы без скобок работают в большинстве браузеров, однако я проверял, что методы без скобок фактически не работают в некоторых браузерах.
По состоянию на 26 февраля 2018 года это утверждение работает в Pale Moon, но не в Google Chrome.
источник
Начальный уровень отступа оператора должен быть равен количеству открытых скобок над ним. (за исключением скобок в кавычках или в комментариях или в директивах препроцессора)
В противном случае K & R будет хорошим стилем отступов. Чтобы исправить их стиль, я рекомендую помещать короткие простые операторы if в одну строку.
вместо того
Если бы я писал редактор, я бы сделал так, чтобы кнопка его автоматического форматирования соскабливала строку до той же строки, что и foo, и я бы заставляла ее вставлять фигурные скобки вокруг бара, если вы нажимаете клавишу возврата перед этим следующим образом:
Тогда легко и последовательно добавлять новые операторы выше или ниже бара в теле оператора if
источник
Иногда они кажутся необходимыми! Я сам не мог в это поверить, но вчера мне пришло в голову сеанс Firebug (недавний Firefox 22.0), который
выполнено, сделать что-то, несмотря на то, что my.condition.key было правдой . Добавление брекетов:
исправил это дело. Есть множество примеров, когда это, очевидно, работает без скобок, но в этом случае это определенно не работает.
Люди, которые склонны помещать более одного утверждения в строку, должны, безусловно, всегда использовать фигурные скобки, потому что такие вещи, как
трудно найти.
источник
Я просто хотел бы отметить, что вы также можете оставить фигурные скобки от всего остального. Как видно из этой статьи Джона Резига .
источник
else
чтобы соответствовать использованию фигурных скобок - в этом примере для подтвержденияelse
проверки кода потребуются фигурные скобки на блоке. [1]: wiki.qt.io/Qt_Coding_Style#BracesЕсть способ получить многострочные не фигурные скобки, если операторы .. (Вау, что по-английски ..), но это своего рода tedius:
источник
if (true) funcName()
иelse return null