Ternær operatør i Java

1. Oversikt

Den ternære betingede operatøren ?: lar oss definere uttrykk i Java. Det er en kondensert form av hvis-annet uttalelse som også returnerer en verdi.

I denne opplæringen lærer vi når og hvordan du bruker en ternær konstruksjon. Vi begynner med å se på syntaksen etterfulgt av å utforske bruken.

2. Syntaks

Den ternære operatøren ?: i Java er den eneste operatøren som godtar tre operander:

boolsk uttrykk? uttrykk1: uttrykk2

Den aller første operanden må være en boolsk uttrykk, kan den andre og den tredje operandene være hvilket som helst uttrykk som gir noe verdi. Den ternære konstruksjonen kommer tilbake uttrykk1 som utdata hvis den første operanden evalueres til ekte, uttrykk2 ellers.

3. Eksempel på ternær operatør

La oss vurdere nedenstående hvis-annet konstruere:

int num = 8; Streng msg = ""; if (num> 10) {msg = "Antallet er større enn 10"; } annet {msg = "Antallet er mindre enn eller lik 10"; }

I koden ovenfor har vi tilordnet en verdi til msg basert på betinget evaluering av num. Vi kan gjøre denne koden mer lesbar og trygg ved å enkelt erstatte hvis-annet uttalelse med en ternær konstruksjon:

final String msg = num> 10? "Antall er større enn 10": "Antall er mindre enn eller lik 10";

4. Uttrykk Evaluering

Når du bruker en Java-ternær konstruksjon, er bare ett av høyre uttrykk, dvs. uttrykk1 eller uttrykk2 blir evaluert ved kjøretid.

Vi kan teste det ut ved å skrive en enkel JUnit testforsøk:

@Test offentlig ugyldig nårConditionIsTrue_thenOnlyFirstExpressionIsEvaluated () {int exp1 = 0, exp2 = 0; int resultat = 12> 10? ++ exp1: ++ exp2; assertThat (exp1) .isEqualTo (1); assertThat (exp2) .isEqualTo (0); assertThat (resultat) .isEqualTo (1); }

Våre boolsk uttrykk 12 > 10 evaluerer alltid til ekte, så verdien av exp2 forble som den er. På samme måte, la oss vurdere hva som skjer for en falsk tilstand:

@Test offentlig ugyldig nårConditionIsFalse_thenOnlySecondExpressionIsEvaluated () {int exp1 = 0, exp2 = 0; int resultat = 8> 10? ++ exp1: ++ exp2; assertThat (exp1) .isEqualTo (0); assertThat (exp2) .isEqualTo (1); assertThat (resultat) .isEqualTo (1); }

Verdien av exp1 forble uberørt, og verdien av exp2 ble økt med 1.

5. Hekkende ternær operatør

Det er mulig for oss å hekke vår ternære operatør til et hvilket som helst antall nivåer du ønsker. Så konstruksjonen:

Streng msg = num> 10? "Antallet er større enn 10": num> 5? "Antall er større enn 5": "Antall er mindre enn lik 5";

er gyldig i Java. For å forbedre lesbarheten til koden ovenfor, kan vi bruke seler (), der det er nødvendig:

Streng msg = num> 10? "Antall er større enn 10": (num> 5? "Antall er større enn 5": "Antall er mindre enn lik 5");

derimot, Vær oppmerksom på at det ikke anbefales å bruke slike dypt nestede ternære konstruksjoner i den virkelige verden. Dette er slik det gjør koden mindre lesbar og vanskelig å vedlikeholde.

6. Konklusjon

I denne raske opplæringen lærte vi om den ternære operatøren i Java. Det er ikke mulig å erstatte hver hvis-annet konstruere med en ternær operatør. Imidlertid er det et flott verktøy i noen tilfeller og gjør koden vår mye kortere og lesbar.

Som vanlig er hele kildekoden tilgjengelig på Github.