Ternär operatör i Java

1. Översikt

Den ternära villkorliga operatören ?: Tillåter oss att definiera uttryck i Java. Det är en kondenserad form av if-else- uttalandet som också returnerar ett värde.

I den här handledningen lär vi oss när och hur man använder en ternär konstruktion. Vi börjar med att titta på dess syntax följt av att utforska dess användning.

2. Syntax

Den ternära operatören ?: I Java är den enda operatören som accepterar tre operander :

booleanExpression ? expression1 : expression2

Den allra första operanden måste vara ett booleskt uttryck, den andra och den tredje operanden kan vara vilket uttryck som helst som ger något värde. Den ternära konstruktionen returnerar expression1 som en utgång om den första operand utvärderas till true , expression2 annars.

3. Exempel på ternär operatör

Låt oss överväga nedanstående if-else- konstruktion:

int num = 8; String msg = ""; if(num > 10) { msg = "Number is greater than 10"; } else { msg = "Number is less than or equal to 10"; }

I ovanstående kod har vi tilldelat msg ett värde baserat på den villkorliga utvärderingen av num . Vi kan göra den här koden mer läsbar och säker genom att enkelt ersätta if-else- uttalandet med en ternär konstruktion:

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

4. Uttrycksutvärdering

När du använder en Java-ternär konstruktion utvärderas endast ett av höger sidauttryck, dvs. antingen expression1 eller expression2 vid körning .

Vi kan testa det genom att skriva ett enkelt JUnit- testfall:

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

Vårt booleska uttryck 12> 10 utvärderas alltid till sant, så värdet på exp2 förblev som det är. Låt oss också överväga vad som händer för ett falskt tillstånd:

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

Värdet på exp1 förblev orört och värdet på exp2 ökades med 1.

5. Häckande ternär operatör

Det är möjligt för oss att hysa vår ternära operatör till valfritt antal nivåer. Så konstruktionen:

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

är giltigt i Java. För att förbättra läsbarheten för ovanstående kod kan vi använda hängslen (), där det är nödvändigt:

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

Men , observera att det inte rekommenderas att använda sådana djupt kapslade ternära konstruktioner i den verkliga världen. Detta är för att det gör koden mindre läsbar och svår att underhålla.

6. Sammanfattning

I denna snabba handledning lärde vi oss om den ternära operatören i Java. Det är inte möjligt att ersätta varje if-else- konstruktion med en ternär operatör. Det är dock ett bra verktyg för vissa fall och gör vår kod mycket kortare och läsbar.

Som vanligt är hela källkoden tillgänglig på Github.