Operador ternário em Java
1. Visão geral
O operador condicional ternário?: nos permite definir expressões em Java. It’s a condensed form of the if-else statement that also returns a value.
Neste tutorial, aprenderemos quando e como usar uma construção ternária. Começaremos observando sua sintaxe e, em seguida, explorando seu uso.
2. Sintaxe
O operador ternário?: em Java éthe only operator which accepts three operands:
booleanExpression ? expression1 : expression2
O primeiro operando deve ser uma expressãoboolean, o segundo e o terceiro operandos podem ser qualquer expressão que retorne algum valor. A construção ternária retornaexpression1 como saída se o primeiro operando for avaliado comotrue,expression2 caso contrário.
3. Exemplo de operador ternário
Vamos considerar a construçãoif-else abaixo:
int num = 8;
String msg = "";
if(num > 10) {
msg = "Number is greater than 10";
}
else {
msg = "Number is less than or equal to 10";
}
No código acima, atribuímos um valor amsg com base na avaliação condicional denum. Podemos tornar este código mais legível e seguro substituindo facilmente a instruçãoif-else por uma construção ternária:
final String msg = num > 10
? "Number is greater than 10"
: "Number is less than or equal to 10";
4. Avaliação de Expressão
When using a Java ternary construct, only one of the right-hand side expressions i.e. either expression1 or expression2 is evaluated at runtime.
Podemos testar isso escrevendo um caso de testeJUnit simples:
@Test
public void whenConditionIsTrue_thenOnlyExpression1IsEvaluated() {
int exp1 = 0, exp2 = 0;
int result = 12 > 10 ? ++exp1 : ++exp2;
assertThat(exp1).isEqualTo(1);
assertThat(exp2).isEqualTo(0);
assertThat(result).isEqualTo(1);
}
Nossa expressãoboolean12 > 10 sempre avalia comotrue,, portanto, o valor deexp2 permaneceu como está. Da mesma forma, vamos considerar o que acontece para uma condiçãofalse:
@Test
public void whenConditionIsFalse_thenOnlyExpression2IsEvaluated() {
int exp1 = 0, exp2 = 0;
int result = 8 > 10 ? ++exp1 : ++exp2;
assertThat(exp1).isEqualTo(0);
assertThat(exp2).isEqualTo(1);
assertThat(result).isEqualTo(1);
}
O valor deexp1 permaneceu inalterado e o valor deexp2 foi incrementado em 1.
5. Operador ternário de aninhamento
É possível aninharmos nosso operador ternário em qualquer número de níveis de nossa escolha. Então a construção:
String msg = num > 10 ? "Number is greater than 10" :
num > 5 ? "Number is greater than 5" : "Number is less than equal to 5";
é válido em Java. Para melhorar a legibilidade do código acima, podemos usar chaves(), sempre que necessário:
String msg = num > 10 ? "Number is greater than 10"
: (num > 5 ? "Number is greater than 5" : "Number is less than equal to 5");
No entanto,,, observe que não é recomendado usar tais construções ternárias profundamente aninhadas no mundo real. Isso ocorre porque torna o código menos legível e difícil de manter.
6. Conclusão
Neste tutorial rápido, aprendemos sobre o operador ternário em Java. Não é possível substituir cada construçãoif-else por um operador ternário. No entanto, é uma ótima ferramenta para alguns casos e torna nosso código muito mais curto e legível.
Como de costume, todo o código-fonte está disponívelover on Github.