JavaScript — это мощный и гибкий язык программирования, предлагающий различные способы обработки условной логики.

Один из самых лаконичных и элегантных способов выражения условных операторов — использование тернарного оператора. Это позволяет вам писать простые if-else conditions в одной строке кода.
Но знаете ли вы, что в одном операторе можно использовать несколько тернарных операторов? В этой статье мы рассмотрим, как использовать эту технику в JavaScript с примерами кода для лучшего понимания.

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

(condition) ? expressionIfTrue : expressionIfFalse;

В этом синтаксисе условие проверяется первым. Выражение перед двоеточием (:) выполняется, если условие оценивается как истинное. В противном случае используется фраза после двоеточия. Это позволяет выполнять множество действий на основе одного условия.

let result = (10 > 0) ? true : false;
// result is true

Приведенный выше код эквивалентен:

let result;
if (10 > 0) {
  result = true;
} else {
  result = false;
}
// result is true

Иногда нам может понадобиться использовать более одного тернарного оператора в одном операторе для обработки нескольких условий. Это называется chaining ternary operators.

Вот пример, демонстрирующий использование нескольких тернарных операторов:

const result = (condition1) ? expression1 :
              (condition2) ? expression2 :
              (condition3) ? expression3 :
              expression4;

Чтобы помочь вам лучше понять эту концепцию, давайте разберем пример с несколькими маркерами:

  • Условия оцениваются последовательно сверху вниз.
  • Если условие1 истинно, выполняется выражение1, и результат присваивается переменной result.
  • Если условие1 ложно, оценка переходит к условию2.
  • Если условие2 истинно, выполняется выражение2, и результат присваивается result.
  • Если условие2 ложно, оценка переходит к условию3.
  • Если условие3 истинно, выполняется выражение3, и результат присваивается result.
  • Если условие3 ложно, выполняется выражение4, и результат присваивается result.

Давайте рассмотрим другой пример кода, чтобы дополнительно проиллюстрировать использование нескольких тернарных операторов:

let marks = 95;
let grade = (marks < 40) ? "F" : (marks < 60) ? "C" : (marks < 80) ? "B" : "A";
// grade is A

Приведенный выше код эквивалентен:

let marks = 95;
let grade;
if (marks < 40) {
  grade = "F";
} else if (marks < 60) {
  grade = "C";
} else if (marks < 80) {
  grade = "B";
} else {
  grade = "A";
}
// grade is A

Примеры использования нескольких тернарных операторов

Вот несколько примеров использования нескольких тернарных операторов в JavaScript:

1: Проверка знака числа

let num = -5;
let sign = (num > 0) ? "positive" : (num < 0) ? "negative" : "zero";
// sign is negative

2. Преобразование логического значения в строку

let bool = true;
let str = bool ? "Yes" : "No";
// str is Yes

3: поиск максимум трех чисел

let x = 10;
let y = 20;
let z = 15;
let max = (x > y) ? ((x > z) ? x : z) : ((y > z) ? y : z);
// max is 20

4. Возврат приветственного сообщения в зависимости от времени

function greet(time) {
  let hour = Number.parseInt(time.split(":")[0]);
  let message = (hour < 12) ? "Good morning" : (hour < 18) ? "Good afternoon" : "Good evening";
  return message;
}

console.log(greet("10:00")); // Good morning
console.log(greet("14:00")); // Good afternoon
console.log(greet("20:00")); // Good evening

Преимущества использования нескольких тернарных операторов

Некоторые из преимуществ использования нескольких тернарных операторов:

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

Недостатки использования нескольких тернарных операторов

Некоторые из недостатков использования нескольких тернарных операторов:

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