Тернарний оператор на 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 завжди має значення 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. Вкладений потрійний оператор

Ми можемо вкласти наш потрійний оператор на будь-яку кількість рівнів на наш вибір. Отже, конструкція:

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.