Тернарный (или условный) оператор существует во многих языках программирования — например, в C++, Java, Python, PHP и других. Разберёмся, как он работает в JavaScript.
Все операторы различаются по количеству аргументов, к которым они применяются. Например, существует оператор «-», который меняет знак числа на противоположный. Если такой оператор применяется к одному числу, то есть у него один аргумент — он называется унарным.
let number1 = 7;
let number2 = -number1;
console.log(number2); // В консоль выведется число -7
Кроме унарных операторов, существуют операторы с двумя аргументами — бинарные. Например, бинарный «+» складывает два аргумента:
let number1 = 7;
let number2 = 3;
console.log(number1 + number2); // В консоль выведется число 10
И, наконец, тернарный оператор:
условие ? выражение1 : выражение2
Это единственный оператор с тремя аргументами, что отражено в названии. Первый аргумент — это условие. Если оно истинно (равно true
), оператор вернёт второй аргумент — выражение1. В ином случае он вернёт третий аргумент — выражение2.
Что-то напоминает, да? По механике работы тернарный оператор похож на условную конструкцию if
с альтернативной веткой else
, но его синтаксис позволяет писать меньше строк кода. Сравним:
let booksCount = 19; // Количество книг, прочтённых за год
let result; // Сюда запишем результат сравнения booksCount с эталонным значением
// Сравним с помощью условной конструкции if
if (booksCount > 15) {
result = 'План на год выполнен!';
} else {
result = 'Читать и ещё раз читать';
}
// А теперь с помощью тернарного оператора
result = (booksCount > 15) ? 'План на год выполнен!' : 'Читать и ещё раз читать';
По сути оба фрагмента кода выполняют одно и то же действие — проверяют условие, а затем присваивают переменной первое или второе выражение в зависимости от истинности этого условия. Разница лишь в форме записи.
Варианты использования
Значение, возвращаемое тернарным оператором, можно записать в переменную — этот вариант мы уже рассмотрели в примере выше. Кроме этого, его можно использовать в функциях при возвращении значения с помощью return
:
let getResult = function (booksCount) {
return (booksCount > 15) ? 'План на год выполнен!' : 'Читать и ещё раз читать';
}
getResult(19); // Функция вернёт значение 'План на год выполнен!'
Также возможно использование множественных тернарных операций. В этом случае несколько операторов «?» будут идти подряд:
let booksCount = 19;
let result;
result = (booksCount > 15) ? 'План на год выполнен!' :
(booksCount > 10) ? 'Уже неплохо!' :
'Читать и ещё раз читать';
Здесь каждое условие проверяется последовательно. Если первое условие истинно, переменной booksCount
присваивается значение 'План на год выполнен!'
. В ином случае код выполняется дальше, и проверяется второе условие (booksCount > 10)
.
Что выбрать: тернарный оператор или if
При выборе за основной показатель нужно взять читабельность кода. Чем код понятнее, нагляднее, тем удобнее его рефакторить и поддерживать. Тернарный оператор может как сделать код проще, так и необоснованно его усложнить. Это зависит от ситуации.
Посмотрим ещё раз на самый первый вариант, уже разобранный выше. Здесь переменной присваивается значение в зависимости от условия, и это пример грамотного использования тернарного оператора. В таком случае он позволяет избавиться от громоздкой условной конструкции и сделать код проще и короче.
let booksCount = 19;
let result;
result = (booksCount > 15) ? 'План на год выполнен!' : 'Читать и ещё раз читать';
Но есть варианты, когда использование оператора усложняет код. В большинстве случаев это относится к множественным тернарным операциям, о которых речь шла выше. Ещё к таким вариантам стоит отнести использование тернарного оператора для выполнения целых фрагментов кода в зависимости от условия, а не простого присвоения значения переменной. Рассмотрим пример:
let booksCount = 19;
(booksCount > 15) ? (
booksCount = 0,
console.log('План на год выполнен!')
) : (
console.log('Читать и ещё раз читать')
);
Такой код достаточно сложно читать, особенно если строк станет больше. Здесь будет уместнее использовать условную конструкцию if
.
Тем не менее не стоит отказываться от тернарного оператора. Он может помочь сделать код понятным и лаконичным. Главное — знать, в каких конкретно ситуациях его полезно использовать, и не злоупотреблять.