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

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

1. обзор

Тернарный условный оператор?: позволяет нам определять выражения в Java. It’s a condensed form of the if-else statement that also returns a value.

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

2. Синтаксис

Тернарный оператор?: в Java - этоthe only operator which accepts three operands:

booleanExpression ? expression1 : expression2

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

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. Выражение Оценка

When using a Java ternary construct, only one of the right-hand side expressions i.e. either expression1 or expression2 is evaluated at runtime.

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

@Test
public void whenConditionIsTrue_thenOnlyExpression1IsEvaluated() {
    int exp1 = 0, exp2 = 0;
    int result = 12 > 10 ? ++exp1 : ++exp2;

    assertThat(exp1).isEqualTo(1);
    assertThat(exp2).isEqualTo(0);
    assertThat(result).isEqualTo(1);
}

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

@Test
public void whenConditionIsFalse_thenOnlyExpression2IsEvaluated() {
    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 тернарным оператором. Однако в некоторых случаях это отличный инструмент, который делает наш код намного короче и читабельнее.

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