Ternarni operator u Javi

1. Pregled

Ternarni uvjetni operator ?: omogućuje nam definiranje izraza u Javi. To je sažeti oblik ako-drugo izraz koji također vraća vrijednost.

U ovom uputstvu naučit ćemo kada i kako koristiti trostruku konstrukciju. Za početak ćemo razmotriti njegovu sintaksu, a zatim istražiti njezinu upotrebu.

2. Sintaksa

Ternarni operater ?: u Javi je jedini operator koji prihvaća tri operanda:

booleanExpression? izraz1: izraz2

Prvi operand mora biti a boolean izraz, drugi i treći operandi mogu biti bilo koji izrazi koji vraćaju neku vrijednost. Vrati se ternarni konstrukt izraz1 kao izlaz ako prvi operand procijeni na pravi, izraz2 inače.

3. Primjer ternarnog operatora

Razmotrimo dolje ako-drugo konstruirati:

int broj = 8; Niz msg = ""; if (num> 10) {msg = "Broj je veći od 10"; } else {msg = "Broj je manji ili jednak 10"; }

U gornjem kodu dodijelili smo vrijednost poruka na temelju uvjetne procjene num. Ovaj kod možemo učiniti čitljivijim i sigurnijim jednostavnom zamjenom ako-drugo izjava s trostrukim konstruktom:

završni niz msg = num> 10? "Broj je veći od 10": "Broj je manji ili jednak 10";

4. Evaluacija izraza

Kada se koristi ternarni konstrukt Java, samo jedan od izraza s desne strane, tj. Bilo koji izraz1 ili izraz2 procjenjuje se za vrijeme izvođenja.

To možemo isprobati tako da napišemo jednostavan JUNIT test slučaj:

@Test javna void kadaConditionIsTrue_thenOnlyFirstExpressionIsEvaluated () {int exp1 = 0, exp2 = 0; rezultat int = 12> 10? ++ exp1: ++ exp2; assertThat (exp1) .isEqualTo (1); assertThat (exp2) .isEqualTo (0); assertThat (rezultat) .isEqualTo (1); }

Naše boolean izraz 12 > 10 uvijek procjenjuje do pravi, pa vrijednost exp2 ostao takav kakav jest. Slično tome, razmotrimo što se događa za lažno stanje:

@Test javna void whenConditionIsFalse_thenOnlySecondExpressionIsEvaluated () {int exp1 = 0, exp2 = 0; rezultat int = 8> 10? ++ exp1: ++ exp2; assertThat (exp1) .isEqualTo (0); assertThat (exp2) .isEqualTo (1); assertThat (rezultat) .isEqualTo (1); }

Vrijednost exp1 ostala netaknuta, a vrijednost exp2 je povećan za 1.

5. Operater gniježđenja

Moguće nam je ugnijezditi svog trostrukog operatera na bilo koji broj razina po našem izboru. Dakle konstrukcija:

Niz msg = num> 10? "Broj je veći od 10": broj> 5? "Broj je veći od 5": "Broj je manji od jednak 5";

vrijedi u Javi. Da bismo poboljšali čitljivost gornjeg koda, možemo koristiti zagrade (), gdje god je potrebno:

Niz msg = num> 10? "Broj je veći od 10": (num> 5? "Broj je veći od 5": "Broj je manji od jednak 5");

Međutim, imajte na umu da se ne preporuča koristiti tako duboko ugniježđene ternarne konstrukcije u stvarnom svijetu. To je zato što čini kôd manje čitljivim i teškim za održavanje.

6. Zaključak

U ovom smo brzom vodiču saznali o ternarnom operatoru u Javi. Nije moguće zamijeniti svaki ako-drugo konstruirati s ternarnim operatorom Međutim, to je izvrstan alat za neke slučajeve i čini naš kod puno kraćim i čitljivijim.

Kao i obično, cijeli izvorni kod dostupan je na Githubu.