Réponses:
Il est appelé l' opérateur conditionnel (qui est un opérateur ternaire ).
Il a la forme de condition
:? value-if-true
: value-if-false
Considérez le ?
comme «alors» et :
comme «autre».
Votre code est équivalent à
if (max != 0)
hsb.s = 255 * delta / max;
else
hsb.s = 0;
addition
un opérateur binaire qui opère sur les expressions précédentes et suivantes (par exemple 1 + 2, le plus fonctionne sur 1 et 2), ou la négation est un opérateur unaire (par exemple -x où la valeur de x est annulée).
Ceci est probablement un peu plus clair lorsqu'il est écrit avec des crochets comme suit:
hsb.s = (max != 0) ? (255 * delta / max) : 0;
Ce qu'il fait, c'est évaluer la pièce dans les premières parenthèses. Si le résultat est vrai, la partie après le? et avant le: est retourné. S'il est faux, ce qui suit le: est retourné.
? :
n'est-ce pas l'opérateur ternaire?
var x= expression ? true:false
?: est une condition à court terme else {}
et des if(){}
problèmes. Votre code est donc interchangeable avec ceci:
if(max != 0){
hsb.s = 225 * delta / max
}
else {
hsb.s = 0
}
Soyez prudent avec cela. Un -1 est évalué comme vrai bien que -1! = Vrai et -1! = Faux. Croyez-moi, je l'ai vu arriver.
alors
-1 ? "vrai côté": "faux côté"
évalue le "vrai côté"
Infinity
(causée par la division par zéro).