Operador Ternário
O operador condicional, ? :, conhecido como operador ternário, é apenas um operador que tem três operandos:
expressaoBoolean ? expressão1 : expressão2
O primeiro operando precisa ser uma expressão booleana, e o segundo e terceiro pode ser qualquer expressão que retorne um valor.
A operação ternária é na verdade uma forma condensada da declaração if-else que retorna um valor. Esses dois códigos são equivalentes:
1 2 3 4 5 6 7 |
int y = 10; int x; if(y > 5) { x = 2 * y; } else { x = 3 * y; } |
A seguir um código equivalente:
1 2 |
int y = 10; int x = (y > 5) ? (2 * y) : (3 * y); |
Veja que muitas vezes ajuda para a legibilidade adicionar parênteses em torno das expressões nas operações ternárias, mas não é necessário.
Não é necessário que a segunda e terceira expressão ternária tenha o mesmo tipo de dados, mas deve combinar com os outros operadores. Veja as seguintes duas declarações:
1 2 |
System.out.println((y > 5) ? 21 : “Zebra”); int animal = (y < 91) ? 9 : “Cavalo”; //não compila |
Ambas expressões têm valores booleanos similares e retorna um int e uma String, contudo somente a primeira linha compila.
O System.out.println() não importa se a declaração são tipos completamente diferente, porque ambos podem ser convertidos para String.
Contudo, o compilador sabe que “Cavalo” é um tipo de dado errado para atribuir ao int, por isso, a compilação não acontece.
Avaliação de Expressões Ternária
Apenas a expressão a direita da operação ternária será avaliada em tempo de execução. Similar ao operador short-circuit, pode acontecer que uma das duas expressões da direita ser executada, isso não é aplicado em tempo de execução. Exemplo:
1 2 3 4 |
int y = 1; int z = 1; final int x = y < 10 ? y++ : z++; System.out.println(y + ”,” + z); //Saída 2,1 |
Veja que a expressão a esquerda foi verdadeira, apenas y foi incrementado. Vamos inverter a situação:
1 2 3 4 |
int y = 1; int z = 1; final int x = y >= 10 ? y++ : z++; System.out.println(y + “,” + z); //Saída 1,2 |
Veja que a expressão a esquerda foi falsa, apenas z foi incrementado.
Dessa maneira, vimos que a expressão ternária pode executar apenas uma expressão particular.
Fonte: OCA – Oracle Certified Associate Java SE 8 Programmer I – Study Guide
Deixe um comentário