Operatore ternario in Java

1. Panoramica

L'operatore condizionale ternario ?: Ci permette di definire espressioni in Java. È una forma condensata dell'istruzione if-else che restituisce anche un valore.

In questo tutorial impareremo quando e come usare un costrutto ternario. Inizieremo esaminando la sua sintassi, seguito dall'esplorazione del suo utilizzo.

2. Sintassi

L'operatore ternario ?: In Java è l'unico operatore che accetta tre operandi :

booleanExpression ? expression1 : expression2

Il primo operando deve essere un'espressione booleana , il secondo e il terzo operando possono essere qualsiasi espressione che restituisca un valore. Il costrutto ternario restituisce expression1 come output se il primo operando restituisce true , altrimenti expression2 .

3. Esempio di operatore ternario

Consideriamo il seguente costrutto 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"; }

Nel codice sopra, abbiamo assegnato un valore a msg basato sulla valutazione condizionale di num . Possiamo rendere questo codice più leggibile e sicuro sostituendo facilmente l' istruzione if-else con un costrutto ternario:

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

4. Valutazione dell'espressione

Quando si utilizza un costrutto ternario Java, solo una delle espressioni a destra, ovvero espressione1 o espressione2, viene valutata in fase di esecuzione .

Possiamo verificarlo scrivendo un semplice test case 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); }

La nostra espressione booleana 12> 10 restituisce sempre true, quindi il valore di exp2 è rimasto così com'è. Allo stesso modo, consideriamo cosa succede per una condizione falsa :

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

Il valore di exp1 è rimasto invariato e il valore di exp2 è stato incrementato di 1.

5. Operatore ternario annidamento

È possibile per noi annidare il nostro operatore ternario a qualsiasi numero di livelli di nostra scelta. Quindi il costrutto:

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

è valido in Java. Per migliorare la leggibilità del codice sopra, possiamo usare le parentesi graffe (), ove necessario:

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

Tuttavia , tieni presente che non è consigliabile utilizzare costrutti ternari così profondamente annidati nel mondo reale. Questo è così in quanto rende il codice meno leggibile e difficile da mantenere.

6. Conclusione

In questo breve tutorial, abbiamo imparato a conoscere l'operatore ternario in Java. Non è possibile sostituire ogni costrutto if-else con un operatore ternario. Tuttavia, è un ottimo strumento per alcuni casi e rende il nostro codice molto più breve e leggibile.

Come al solito, l'intero codice sorgente è disponibile su Github.