Os operadores ternários podem ser vistos como uma versão compacta de um if-else.
Normalmente são usados em instruções return (mas não só), bastando uma única linha para tomar a decisão: devolvem o valor da esquerda se a expressão for true e o valor da direita se for false.
Muitas expressões simples de if/else podem ser simplificadas com operadores ternários.
// this ternary statement
return 5 > 4 ? true : false;
// is equivalent to this if/else
if ( 5 > 4 ) {
return true;
} else {
return false;
}
Então, como decidir entre um if-else e um ternário? Os operadores ternários usam-se em cenários simples, em que só precisas de devolver um valor com base numa condição e não é necessário qualquer cálculo extra. Usa um if-else para tudo o resto: condições aninhadas, expressões grandes e situações em que é preciso mais do que uma linha para decidir o valor devolvido.
Embora possas aninhar operadores ternários, o código torna-se muitas vezes difícil de ler. Nesses casos, é preferível usar ifs aninhados.
// hard to read
int value = expr1 ? expr2 && expr3 ? val1 : (val2 + val3) : expr4;
// easier to read
if (expr1){
if (expr2 && expr3){
return val1;
}
return val2 + val3;
}
return val4;
Os operadores ternários e as instruções if/else são um bom exemplo de que, ao programar, tens várias formas de alcançar o mesmo resultado.