Тернарный оператор на 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.