Opérateur Ternaire En Java

Opérateur ternaire en Java

1. Vue d'ensemble

L'opérateur conditionnel ternaire?: permet de définir des expressions en Java. It’s a condensed form of the if-else statement that also returns a value.

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

2. Syntaxe

L'opérateur ternaire?: en Java estthe only operator which accepts three operands:

booleanExpression ? expression1 : expression2

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

3. Exemple d'opérateur ternaire

Considérons la constructionif-elseci-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 denum. Nous pouvons rendre ce code plus lisible et plus sûr en remplaçant facilement l'instructionif-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

When using a Java ternary construct, only one of the right-hand side expressions i.e. either expression1 or expression2 is evaluated at runtime.

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

@Test
public void whenConditionIsTrue_thenOnlyExpression1IsEvaluated() {
    int exp1 = 0, exp2 = 0;
    int result = 12 > 10 ? ++exp1 : ++exp2;

    assertThat(exp1).isEqualTo(1);
    assertThat(exp2).isEqualTo(0);
    assertThat(result).isEqualTo(1);
}

Notre expressionboolean12 > 10 est toujours évaluée àtrue, donc la valeur deexp2 est restée telle quelle. De même, considérons ce qui se passe pour une conditionfalse:

@Test
public void whenConditionIsFalse_thenOnlyExpression2IsEvaluated() {
    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 deexp1 est restée inchangée et la valeur deexp2 a été incrémentée de 1.

5. Opérateur ternaire imbriqué

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(), chaque fois que 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. En effet, cela rend le code moins lisible et difficile à maintenir.

6. Conclusion

Dans ce rapide tutoriel, nous avons découvert l'opérateur ternaire en Java. Il n’est pas possible de remplacer chaque constructionif-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 disponibleover on Github.