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;
addition
um 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).