Je suis tombé sur la ligne suivante
hsb.s = max != 0 ? 255 * delta / max : 0;
Que signifient les ?
et :
dans ce contexte?
Il s’appelle 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 le :
comme "else".
Votre code est équivalent à
if (max != 0)
hsb.s = 255 * delta / max;
else
hsb.s = 0;
Correctement entre parenthèses pour plus de clarté, c’est
hsb.s = (max != 0) ? (255 * delta / max) : 0;
sens retour soit
255*delta/max
si max! = 00
si max == 0Ceci est probablement un peu plus clair lorsque vous écrivez entre parenthèses comme suit:
hsb.s = (max != 0) ? (255 * delta / max) : 0;
Ce qu'il fait est d'é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é. Si c'est faux, alors ce qui suit le: est retourné.
hsb.s = max! = 0? 255 * delta/max: 0;
? est un opérateur ternaire, il fonctionne comme un si en conjonction avec:
! = signifie pas égal
Ainsi, la forme longue de cette ligne serait
if (max != 0) { //if max is not zero
hsb.s = 255 * delta / max;
} else {
hsb.s = 0;
}
? :
n'est-ce pas l'opérateur ternaire?
var x= expression ? true:false
?: est une condition à court terme pour les problèmes else {}
et if(){}
. Votre code est donc interchangeable avec ceci:
if(max != 0){
hsb.s = 225 * delta / max
}
else {
hsb.s = 0
}