Risposte:
Si chiama Operatore condizionale (che è un operatore ternario ).
Ha la forma di condition
:? value-if-true
: value-if-false
Pensa a ?
come "allora" e :
come "altro".
Il tuo codice è equivalente a
if (max != 0)
hsb.s = 255 * delta / max;
else
hsb.s = 0;
addition
un operatore binario che opera sulle espressioni precedenti e seguenti (es. 1 + 2 il segno positivo opera su 1 e 2), oppure la negazione è un operatore unario (es. -X dove il valore di x è negato).
Questo è probabilmente un po 'più chiaro se scritto tra parentesi come segue:
hsb.s = (max != 0) ? (255 * delta / max) : 0;
Ciò che fa è valutare la parte tra le prime parentesi. Se il risultato è vero, la parte dopo il? e prima che: venga restituito. Se è falso, viene restituito quanto segue:
? :
non è questo l'operatore ternario?
var x= expression ? true:false
?: è una condizione abbreviata per else {}
e if(){}
problemi. Quindi il tuo codice è intercambiabile con questo:
if(max != 0){
hsb.s = 225 * delta / max
}
else {
hsb.s = 0
}
Stai attento con questo. A -1 viene considerato vero sebbene -1! = Vero e -1! = Falso. Fidati di me, l'ho visto accadere.
così
-1? "lato vero": "lato falso"
valuta "lato vero"
Infinity
(causata dalla divisione per zero).