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

1. Обзор

Тернарный условный оператор ?: Позволяет нам определять выражения в Java. Это сокращенная форма оператора if-else, которая также возвращает значение.

В этом уроке мы узнаем, когда и как использовать троичную конструкцию. Мы начнем с рассмотрения его синтаксиса, а затем исследуем его использование.

2. Синтаксис

Тернарный оператор ?: В Java - единственный оператор, который принимает три операнда :

booleanExpression ? expression1 : expression2

Самый первый операнд должен быть логическим выражением, второй и третий операнды могут быть любым выражением, возвращающим некоторое значение. Тернарная конструкция возвращает выражение1 в качестве вывода, если первый операнд принимает значение true , в противном случае - выражение2 .

3. Пример тернарного оператора

Давайте рассмотрим приведенную ниже конструкцию if-else :

int num = 8; String msg = ""; if(num > 10) { msg = "Number is greater than 10"; } else { msg = "Number is less than or equal to 10"; }

В приведенном выше коде мы присвоили msg значение на основе условной оценки num . Мы можем сделать этот код более читабельным и безопасным, легко заменив оператор if-else тернарной конструкцией:

final String msg = num > 10 ? "Number is greater than 10" : "Number is less than or equal to 10";

4. Оценка выражений

При использовании тернарной конструкции Java только одно из выражений с правой стороны, то есть выражение1 или выражение2 , оценивается во время выполнения .

Мы можем проверить это, написав простой тестовый пример JUnit :

@Test public void whenConditionIsTrue_thenOnlyFirstExpressionIsEvaluated() { int exp1 = 0, exp2 = 0; int result = 12 > 10 ? ++exp1 : ++exp2; assertThat(exp1).isEqualTo(1); assertThat(exp2).isEqualTo(0); assertThat(result).isEqualTo(1); }

Наше логическое выражение 12> 10 всегда истинно, поэтому значение exp2 осталось как есть. Точно так же давайте рассмотрим, что происходит при ложном условии:

@Test public void whenConditionIsFalse_thenOnlySecondExpressionIsEvaluated() { int exp1 = 0, exp2 = 0; int result = 8 > 10 ? ++exp1 : ++exp2; assertThat(exp1).isEqualTo(0); assertThat(exp2).isEqualTo(1); assertThat(result).isEqualTo(1); }

Значение exp1 осталось нетронутым, а значение exp2 было увеличено на 1.

5. Вложенный тернарный оператор

Мы можем вложить наш тернарный оператор в любое количество уровней по нашему выбору. Итак, конструкция:

String msg = num > 10 ? "Number is greater than 10" : num > 5 ? "Number is greater than 5" : "Number is less than equal to 5";

действительно в Java. Чтобы улучшить читаемость приведенного выше кода, мы можем использовать фигурные скобки (), где это необходимо:

String msg = num > 10 ? "Number is greater than 10" : (num > 5 ? "Number is greater than 5" : "Number is less than equal to 5");

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

6. Заключение

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

Как обычно, весь исходный код доступен на Github.