Respuestas:
Se llama operador condicional (que es un operador ternario ).
Tiene la forma de condition:? value-if-true: value-if-false
Piense en el ?como "entonces" y :como "más".
Tu código es equivalente a
if (max != 0)
hsb.s = 255 * delta / max;
else
hsb.s = 0;
additionque un operador binario que opera en las expresiones anteriores y siguientes (por ejemplo, 1 + 2, el más opera en 1 y 2), o la negación es un operador unario (por ejemplo, -x donde se niega el valor de x).
Esto es probablemente un poco más claro cuando se escribe entre paréntesis de la siguiente manera:
hsb.s = (max != 0) ? (255 * delta / max) : 0;
Lo que hace es evaluar la parte en los primeros corchetes. Si el resultado es verdadero, entonces la parte después de? y antes de que se devuelva: Si es falso, se devuelve lo que sigue a:
? : ¿No es este el operador ternario?
var x= expression ? true:false
?: Es una condición taquigrafía para else {}y if(){}problemas. Entonces su código es intercambiable para esto:
if(max != 0){
hsb.s = 225 * delta / max
}
else {
hsb.s = 0
}
Ten cuidado con esto. A -1 se evalúa como verdadero aunque -1! = Verdadero y -1! = Falso. Confía en mí, lo he visto suceder.
entonces
-1? "lado verdadero": "lado falso"
se evalúa como "lado verdadero"
Infinity(causada por la división por cero).