Os operadores ternários podem ser vistos como uma versão compacta do if-else.
Costumam ser usados em instruções de retorno (mas não só nelas): precisam de uma única linha para tomar a decisão, retornando 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 if-else e ternário? Bem, os operadores ternários são usados em cenários simples, quando você só precisa retornar um valor com base em uma condição e nenhum cálculo extra é necessário. Use um if-else para todo o resto, como condições aninhadas, expressões grandes ou quando for preciso mais de uma linha para decidir o valor de retorno.
Você até pode aninhar operadores ternários, mas o código costuma ficar difícil de ler.
Nesses casos, prefira 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, na programação, você tem várias formas de chegar ao mesmo resultado.