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
всегда оценивается как true
, поэтому значение 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. Вложенный тернарный оператор
Мы можем вложить наш тернарный оператор в любое количество уровней по нашему выбору.
Итак, эта конструкция действительна в Java:
String msg = num > 10 ? "Number is greater than 10" :
num > 5 ? "Number is greater than 5" : "Number is less than equal to 5";
Чтобы улучшить читаемость приведенного выше кода, мы можем использовать фигурные скобки ()
везде, где это необходимо:
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 .