Opérateur ternaire en Java

1. Vue d'ensemble

L'opérateur conditionnel ternaire ?: Permet de définir des expressions en Java. C'est une forme condensée de l' instruction if-else qui renvoie également une valeur.

Dans ce didacticiel, nous allons apprendre quand et comment utiliser une construction ternaire. Nous allons commencer par regarder sa syntaxe puis explorer son utilisation.

2. Syntaxe

L'opérateur ternaire ?: En Java est le seul opérateur qui accepte trois opérandes :

booleanExpression ? expression1 : expression2

Le tout premier opérande doit être une expression booléenne , les deuxième et troisième opérandes peuvent être n'importe quelle expression qui renvoie une valeur. La construction ternaire renvoie expression1 comme sortie si le premier opérande est évalué à vrai , expression2 dans le cas contraire.

3. Exemple d'opérateur ternaire

Considérons la construction if-else ci - dessous :

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

Dans le code ci-dessus, nous avons attribué une valeur à msg en fonction de l'évaluation conditionnelle de num . Nous pouvons rendre ce code plus lisible et plus sûr en remplaçant facilement l' instruction if-else par une construction ternaire:

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

4. Évaluation de l'expression

Lors de l'utilisation d'une construction ternaire Java, une seule des expressions de droite, c'est-à-dire expression1 ou expression2, est évaluée lors de l'exécution .

Nous pouvons tester cela en écrivant un cas de test JUnit simple :

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

Notre expression booléenne 12> 10 est toujours évaluée à vrai, donc la valeur de exp2 est restée telle quelle . De même, considérons ce qui se passe pour une fausse condition:

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

La valeur de exp1 est restée inchangée et la valeur de exp2 a été incrémentée de 1.

5. Opérateur ternaire d'imbrication

Il nous est possible d'imbriquer notre opérateur ternaire à n'importe quel nombre de niveaux de notre choix. Donc la construction:

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

est valide en Java. Pour améliorer la lisibilité du code ci-dessus, nous pouvons utiliser des accolades (), si nécessaire:

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

Cependant , veuillez noter qu'il n'est pas recommandé d'utiliser des constructions ternaires aussi profondément imbriquées dans le monde réel. Il en est ainsi car cela rend le code moins lisible et difficile à maintenir.

6. Conclusion

Dans ce tutoriel rapide, nous avons découvert l'opérateur ternaire en Java. Il n'est pas possible de remplacer chaque construction if-else par un opérateur ternaire. Cependant, c'est un excellent outil dans certains cas et rend notre code beaucoup plus court et lisible.

Comme d'habitude, l'intégralité du code source est disponible sur Github.