Je suis tombé sur la ligne suivante
hsb.s = max != 0 ? 255 * delta / max : 0;
Qu’est-ce que le ?
et :
signifie 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
Pensez à la ?
comme “alors” et :
comme “sinon”.
Votre code est équivalent à
if (max != 0) hsb.s = 255 * delta / max; else hsb.s = 0;
Correctement entre parenthèses pour plus de clarté, il est
hsb.s = (max != 0) ? (255 * delta / max) : 0;
sens retour non plus
255*delta/max
si max! = 0 0
si max == 0 hsb.s = max! = 0? 255 * delta / max: 0;
? est un opérateur ternaire, il fonctionne comme un si en conjonction avec:
! = signifie pas égal
Donc, la forme longue de cette ligne serait
if (max != 0) { //if max is not zero hsb.s = 255 * delta / max; } else { hsb.s = 0; }
Ceci est probablement un peu plus clair quand il est écrit entre parenthèses comme suit:
hsb.s = (max != 0) ? (255 * delta / max) : 0;
Qu’est-ce qu’il fait est d’évaluer la partie dans les premières parenthèses. Si le résultat est vrai alors la partie après le? et avant le: est retourné. Si c’est faux, alors ce qui suit le: est retourné.
? :
? :
n’est-ce pas l’opérateur ternaire?
var x= expression ? true:false
Soyez prudent avec cela. Un -1 est évalué à true bien que -1! = True et -1! = False. Croyez-moi, je l’ai vu arriver.
alors
-1 ? “vrai côté”: “faux côté”
évalue à “vrai côté”