Тернарен оператор в Java

1. Общ преглед

Третичния условен оператор ? Ни позволява да се определи изрази в Java. Това е съкратена форма на оператора if-else , която също връща стойност.

В този урок ще научим кога и как да използваме тройна конструкция. Ще започнем, като разгледаме неговия синтаксис, последван от проучване на неговото използване.

2. Синтаксис

Третичния оператор : в Java е единственият оператор, който приема три операнди :

booleanExpression ? expression1 : expression2

Първият операнд трябва да е булев израз, вторият и третият операнд могат да бъдат всеки израз, който връща някаква стойност. Тройната конструкция връща израз1 като изход, ако първият операнд прецени в истина , израз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.