Java Language L'opérateur conditionnel (? :)


Exemple

Syntaxe

{condition à évaluer} ? {statement-execute-on-true} : {statement-execute-on-false}

Comme indiqué dans la syntaxe, l'opérateur conditionnel (également appelé opérateur ternaire 1 ) utilise le ? (point d'interrogation) et : (deux-points) caractères pour permettre une expression conditionnelle de deux résultats possibles. Il peut être utilisé pour remplacer des blocs if-else plus longs pour renvoyer l'une des deux valeurs en fonction de la condition.

result = testCondition ? value1 : value2

Est équivalent à

if (testCondition) { 
    result = value1; 
} else { 
    result = value2; 
}

Il peut être lu comme suit: «Si testCondition est true, définissez result sur value1; sinon, définissez le résultat sur valeur2 ”.

Par exemple:

// get absolute value using conditional operator 
a = -10;
int absValue = a < 0 ? -a : a;
System.out.println("abs = " + absValue); // prints "abs = 10"

Est équivalent à

// get absolute value using if/else loop
a = -10;
int absValue;
if (a < 0) {
    absValue = -a;
} else {
    absValue = a;
}
System.out.println("abs = " + absValue); // prints "abs = 10"

Usage courant

Vous pouvez utiliser l'opérateur conditionnel pour les affectations conditionnelles (comme la vérification null).

String x = y != null ? y.toString() : ""; //where y is an object

Cet exemple est équivalent à:

String x = "";

if (y != null) {
    x = y.toString();
}

Étant donné que l'opérateur conditionnel a la deuxième priorité la plus basse, au-dessus des opérateurs d'affectation , il est rarement nécessaire d'utiliser des parenthèses autour de la condition , mais des parenthèses sont nécessaires dans toute la structure de l'opérateur conditionnel lorsqu'il est associé à d'autres opérateurs:

// no parenthesis needed for expressions in the 3 parts
10 <= a && a < 19 ? b * 5 : b * 7

// parenthesis required
7 * (a > 0 ? 2 : 5)

Les opérateurs conditionnels peuvent également être imbriqués dans la troisième partie, où ils fonctionnent plus comme un chaînage ou comme une instruction switch.

a ? "a is true" :
b ? "a is false, b is true" :
c ? "a and b are false, c is true" :
    "a, b, and c are false"

//Operator precedence can be illustrated with parenthesis:

a ? x : (b ? y : (c ? z : w))

Note de bas de page:

1 - La spécification de langage Java et le didacticiel Java appellent tous deux l'opérateur ( ? : :) L'opérateur conditionnel . Le tutoriel dit qu'il est "également connu sous le nom d'opérateur ternaire" car il est (actuellement) le seul opérateur ternaire défini par Java. La terminologie "opérateur conditionnel" est cohérente avec C et C ++ et les autres langages avec un opérateur équivalent.