Тернарные операторы как короткие условные высказывания - PullRequest
1 голос
/ 21 февраля 2012

Что-то не так с использованием троичных операторов вместо более длинных условных операторов в Javascript, например, с использованием:

(variable == "dog") ? dog_stuff() : false;

Вместо

if ( variable == "dog" ) 
{
    dog_stuff();
}

Это может звучать как глупый вопрос, но я просто нахожу, что он довольно быстрый и легкий для чтения, я просто не хочу его использовать, если есть возможный недостаток?

Ответы [ 3 ]

5 голосов
/ 21 февраля 2012

Вы также можете написать

(variable == 'dog') && dog_stuff();

если у вас нет оператора else.

Несколько строк из backbone.js:

  options || (options = {});
  models = _.isArray(models) ? models.slice() : [models];
  model = this.getByCid(models[i]) || this.get(models[i]);

Вы можете сгруппировать несколько операторов, если это очень необходимо:

(1==1) && (a=2,b=3)
alert(a); // 2
alert(b); // 3
3 голосов
/ 21 февраля 2012

Это неправильно, потому что вы говорите своему коду выполнить false. Представьте себе следующий код:

if ( variable == "dog" ) 
{
    dog_stuff();
} else {
    false;
}

IMO 4-х строчный вызов условной функции совершенно нормально. Вы можете сократить его до:

if (variable == "dog") dog_stuff();

Единственная проблема с этим, если вы закомментируете это или добавите еще 1 функцию, тогда все выглядит правильно, но не выполняется правильно:

if (variable == "dog") dog_walk(); dog_bark(); // dog_bark executes always!
if (variable == "dog") // dog_walk();
earn_cash(); // suddenly earn_cash() is dog-dependent.
1 голос
/ 21 февраля 2012

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

...