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.