Одна строка «if» для JavaScript - лучший синтаксис, эта альтернатива? - PullRequest
166 голосов
/ 14 января 2012

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

Но как насчет этого?

if (lemons) { document.write("foo gave me a bar"); }

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

Злой близнец во мне хочет предложить это, хотя синтаксисочевидно, не для этого, и, вероятно, просто плохая идея.

(syntax) ? document.write("My evil twin emerges"): "";

Ответы [ 12 ]

0 голосов
/ 10 июля 2019

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

У исходного вопроса не было альтернативы, и троичный оператор с единственной (реальной) ветвью вынуждает вас возвращать придуманный ответ.

lemons ? "foo gave me a bar" : "who knows what you'll get back"

Я думаю, что наиболее распространенным вариантом является lemons ? 'foo...' : '', и, как вы узнаете, прочитав множество статей для любого языка, посвященных истине, лжи, правде, фальсе, нулю, нулю, пустому, пустому (с нашими без ?), вы входите в минное поле (хотя и хорошо задокументированное минное поле.)

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

Долгий способ сказать, что я голосую за if (lemons) "foo".

0 голосов
/ 18 июля 2018
**Old Method:**
if(x){
   add(x);
}
New Method:
x && add(x);

Даже назначить операцию, также мы можем сделать с круглыми скобками

exp.includes('regexp_replace') && (exp = exp.replace(/,/g, '@&'));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...