Respostas:
É chamado de Operador Condicional (que é um operador ternário ).
Tem a forma de condition:? value-if-true: value-if-false
Pense no ?como "então" e :como "outro".
Seu código é equivalente a
if (max != 0)
hsb.s = 255 * delta / max;
else
hsb.s = 0;
additionum operador binário que opera nas expressões anteriores e seguintes (por exemplo, 1 + 2, o plus opera em 1 e 2), ou a negação é um operador unário (por exemplo, -x onde o valor de x é negado).
Provavelmente, isso é um pouco mais claro quando escrito entre colchetes, da seguinte maneira:
hsb.s = (max != 0) ? (255 * delta / max) : 0;
O que ele faz é avaliar a peça nos primeiros colchetes. Se o resultado for verdadeiro, a parte após o? e antes do: é retornado. Se for falso, o que se segue é retornado.
? : este não é o operador ternário?
var x= expression ? true:false
?: É uma condição de curto mão para else {}e if(){}problemas. Portanto, seu código é intercambiável com isso:
if(max != 0){
hsb.s = 225 * delta / max
}
else {
hsb.s = 0
}
Tenha cuidado com isso. Um -1 é avaliado como verdadeiro, embora -1! = Verdadeiro e -1! = Falso. Confie em mim, eu já vi isso acontecer.
tão
-1? "lado verdadeiro": "lado falso"
avalia como "lado verdadeiro"
Infinity(causada pela divisão por zero).