Pull to refresh

Расширенное применение тернарного оператора

Reading time1 min
Views9K
Знакомая всем конструкция оператора: var a = (condition)? c: d; может быть использована более эффективно…

Например выполнять функции по условию:
condition ? exec1() : exec2; или только одну функцию: condition ? exec1() : null; или condition ? exec1() : 0; Можно еще больше оптимизировать применив оператор &&. Пример: condition && exec1();
Есть одна проблема в использовании такой конструкции: невозможность исполнения нескольких функций одновременно по одному из условий, т.е. вариант condition ? exec1(); exec2(); : 0; неверен.
Решение может быть таким:
condition ?
 (function() {
  exec1();
  exec2();
 })()
:0;

Второе решение: condition ? exec1() && exec2() && exec3() : 0; намного компактнее, но увы у него есть крупный недостаток: если одна из выполняемых функций возвратит false интерпретатор остановит выполнение следующих, такая же проблема возникнет если использовать оператор ||, интерпретатор будет останавливаться при первом же true-результате.
Выход есть в применении «bitwise» оператора: condition ? exec1() | exec2() | exec3() : 0; или condition && ( exec1() | exec2() | exec3() );
Как говорится вуаля и удобно и компактно.

P.S. Возможно также применение запятой, как разделителя функций:
condition ? ( exec1() , exec2() , exec3() ) :0;

По материалам paulbakaus.com
Tags:
Hubs:
+2
Comments89

Articles