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.