Что он делает и почему вам следует прекратить его использовать

Операторы JavaScript

В JavaScript есть несколько разных типов операторов. К ним относятся сравнение, арифметика, логика и многое другое.

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

Унарный

Унарный оператор принимает только один операнд до или после оператора:

operator operand || operand operator
for example:
x++ || ++x

Двоичный

Бинарный оператор требует двух операндов, наиболее распространенными примерами являются базовое сложение, вычитание, умножение и деление:

operand operator operand
x + y; || x - y; || x * y; || x / y;

Операторы отношения, побитовые операции, равенства и логические операторы также являются двоичными:

operand operator operand
a few examples (non-exhaustive):
x < y; // the less-than relational operator
x << y; // the left shift bitwise operator
x || y; // binary logical operator
x == y; // the equals operator

И это подводит нас к тернарности.

Тернарный оператор

Условный (тернарный) оператор - единственный оператор JavaScript, который принимает три операнда: условие, за которым следует вопросительный знак (?), затем выражение для выполнения, если условие« истинно , за которым следует двоеточие (:), и наконец, выражение, которое нужно выполнить, если условие ложно. - MDN

Синтаксис показан ниже:

condition ? value1 : value2

Если condition истинно, тернарный оператор будет иметь значение value1. Если condition оценивается как ложь (или ложь), он имеет значение value2.

let bouncerReply = (age >= 21) ? 'Access allowed' : 'Access denied';

Вы также можете связать условные операторы:

let message = (tempCelsius > 95) ? 'Too hot!' :
  (tempCelsius < 95) ? 'Too cold!' :
  (tempCelsius === 95) ? 'Just right!' :
  'This isn't porridge!';
  1. Первый вопросительный знак проверяет условие tempCelsius > 95.
  2. Если true, вернуть 'Too hot!'. Если нет, проверьте условие tempCelsius < 95.
  3. Если true, вернуть 'Too cold!'. Если нет, проверьте tempCelsius === 95.
  4. Если это true - возвращает 'Just right!'. В противном случае он переходит к выражению после последнего двоеточия :, возвращая 'This isn't porridge!'.

Стоит ли его использовать?

Тот факт, что я почувствовал необходимость включить объяснение приведенной выше последовательности тернарных выражений, дает мой ответ на этот вопрос. Вот как будет выглядеть приведенный выше код при использовании if..else:

Лично я бы рекомендовал использовать по умолчанию операторы if..else вместо использования тернарного / условного оператора. Просто мое собственное мнение.

Сцепление или вложенность троичных элементов делает минимизацию, за которую они рекламируются, незначительна. Конечно, пример if..else длиннее на несколько строк кода, но он также намного удобнее для чтения. Оставьте минификацию минификаторам.

Какая разница?

Тернарный оператор - это не просто замена if..else конструкций.

Разница в том, что тернарный оператор - это выражение, а конструкция if..else - это инструкция. Выражение возвращает значение, а инструкция - нет.

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

Резюме

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

Я считаю, что читаемость всегда должна быть в приоритете при написании кода. Ошибки часто возникают из-за неправильного понимания ранее написанного кода. Ваше будущее будет вам благодарно, как и любые разработчики, работающие с вашим кодом.

Особенно, когда разница в длине кода или производительности незначительна.

Спасибо за прочтение!