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

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

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

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

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

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

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

Ответы [ 12 ]

282 голосов
/ 14 января 2012

Я видел поведение короткого замыкания оператора &&, используемого для достижения этой цели, хотя людям, которые не привыкли к этому, может быть трудно читать или даже называть это анти-паттерном:

lemons && document.write("foo gave me a bar");  

Лично я часто буду использовать однострочный if без скобок, например:

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

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

111 голосов
/ 27 января 2015

Я использую это так:

(lemons) ? alert("please give me a lemonade") : alert("then give me a beer");
36 голосов
/ 17 июня 2014

Вы можете использовать этот формат, который обычно используется в PHP:

(lemon) ? document.write("foo gave me a bar") : document.write("if condition is FALSE");
14 голосов
/ 23 сентября 2016

Эта строка намного чище.

if(dog) alert('bark bark');

Я предпочитаю это. надеюсь, это кому-нибудь поможет

14 голосов
/ 27 июля 2015

// Еще один простой пример

 var a = 11;
 a == 10 ? alert("true") : alert("false");
7 голосов
/ 22 июня 2017

может использовать это,

lemons ? alert("please give me a lemonade") : alert("then give me a beer");

объяснение: если существует lemons, дайте мне alert("please give me a lemonade") else alert("then give me a beer")

6 голосов
/ 13 марта 2018

Как многие говорили, если вы ищете фактическую 1 строку, тогда:

    if (Boolean_expression) do.something();

является предпочтительным. Однако, если вы хотите сделать if / else, то ваш друг (и к тому же очень крутой) - троичный:

    (Boolean_expression) ? do.somethingForTrue() : do.somethingForFalse();

ТАКЖЕ:

    var something = (Boolean_expression) ? trueValueHardware : falseATRON;

Однако я видел один очень крутой пример. Кричит @ Peter-Oslson для &&

    (Boolean_expression) && do.something();

Наконец, это не оператор if, но выполнение вещей в цикле с помощью map / redu или Promise.resolve () тоже забавно. Кричит @ brunettdan

2 голосов
/ 01 февраля 2017

Пример функций со стрелками:

let somethingTrue = true
[1,2,3,4,5].map(i=>somethingTrue && i*2)

В обещаниях:

Promise.resolve()
  .then(_=>checkTrueFalse && asyncFunc())
  .then(_=>{ .. })

В противном случае:

if(somethingTrue) thenDo()

Если это просто условное выражение, я предпочитаю использовать if (значение) всегда, когда это возможно, потому что слово if в начале утверждения говорит больше о том, что происходит, чем парантез и вопросительные знаки.

2 голосов
/ 05 февраля 2014

Это также можно сделать, используя одну строку с while петлями и if, например:

if (blah)
    doThis();

Также работает с while петлями.

1 голос
/ 26 октября 2018

Как уже было сказано, вы можете использовать:

&& style

lemons && document.write("foo gave me a bar");  

или

стиль без скобок

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

возврат короткого замыкания

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

if (lemons) return "foo gave me a bar";

как

lemons && return "foo gave me a bar"; // does not work!

даст вам SyntaxError: Unexpected keyword 'return'

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