Operator ternar în Java

1. Prezentare generală

Operatorul condițional ternar ?: Ne permite să definim expresii în Java. Este o formă condensată a instrucțiunii if-else care returnează și o valoare.

În acest tutorial, vom afla când și cum să utilizați o construcție ternară. Vom începe prin a analiza sintaxa acesteia urmată de a explora utilizarea acesteia.

2. Sintaxă

Operatorul ternar ?: În Java este singurul operator care acceptă trei operanzi :

booleanExpression ? expression1 : expression2

Primul operand trebuie să fie o expresie booleană , al doilea și al treilea operand pot fi orice expresie care returnează o anumită valoare. Constructul ternar returnează expresia1 ca ieșire dacă primul operand se evaluează la adevărat , expresia2 altfel.

3. Exemplu de operator ternar

Să luăm în considerare următoarea construcție 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"; }

În codul de mai sus, am atribuit o valoare msg pe baza evaluării condiționate a num . Putem face acest cod mai lizibil și mai sigur înlocuind cu ușurință instrucțiunea if-else cu un construct ternar:

final String msg = num > 10 ? "Number is greater than 10" : "Number is less than or equal to 10";

4. Evaluarea expresiei

Atunci când se utilizează o construcție ternară Java, doar una dintre expresiile din partea dreaptă, adică fie expresie1, fie expresie2, este evaluată la runtime .

Putem testa acest lucru scriind un caz de test simplu 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); }

Expresia noastră booleană 12> 10 se evaluează întotdeauna la adevărat, deci valoarea exp2 a rămas așa cum este. În mod similar, să luăm în considerare ce se întâmplă pentru o condiție falsă :

@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); }

Valoarea exp1 a rămas neatinsă, iar valoarea exp2 a fost mărită cu 1.

5. Operator ternar cuibărit

Este posibil pentru noi să ne cuibărim operatorul ternar la orice număr de niveluri la alegere. Deci, construcția:

String msg = num > 10 ? "Number is greater than 10" : num > 5 ? "Number is greater than 5" : "Number is less than equal to 5";

este valabil în Java. Pentru a îmbunătăți lizibilitatea codului de mai sus, putem folosi paranteze (), ori de câte ori este necesar:

String msg = num > 10 ? "Number is greater than 10" : (num > 5 ? "Number is greater than 5" : "Number is less than equal to 5");

Cu toate acestea , vă rugăm să rețineți că nu este recomandat să utilizați astfel de construcții ternare profund imbricate în lumea reală. Acest lucru se întâmplă întrucât face codul mai puțin lizibil și dificil de întreținut.

6. Concluzie

În acest tutorial rapid, am aflat despre operatorul ternar din Java. Nu este posibil să înlocuiți fiecare construcție if-else cu un operator ternar. Cu toate acestea, este un instrument excelent pentru unele cazuri și face codul nostru mult mai scurt și lizibil.

Ca de obicei, întregul cod sursă este disponibil pe Github.