Operador ternário em Java

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.