2 minutos

Operador Ternario en Java

1. Introducción

El operador condicional ternario ?: en Java es una característica que nos permite definir expresiones de manera concisa. Se trata de una forma condensada de la declaración if-else que también devuelve un valor.

En este tutorial, exploraremos cuándo y cómo utilizar una construcción ternaria. Comenzaremos por analizar su sintaxis y luego exploraremos su uso.

2. Sintaxis

El operador ternario ?: en Java es el único operador que acepta tres operandos:

expresionBooleana ? expresion1 : expresion2

El primer operando debe ser una expresión booleana, y el segundo y tercer operandos pueden ser cualquier expresión que devuelva algún valor. La construcción ternaria devuelve expresion1 como resultado si el primer operando se evalúa como true; en caso contrario, devuelve expresion2.

3. Ejemplo de operador ternario

Consideremos esta estructura if-else:

int numero = 8;
String mensaje = "";
if(numero > 10) {
    mensaje = "El número es mayor que 10";
}
else {
    mensaje = "El número es menor o igual a 10";
}

Aquí hemos asignado un valor a mensaje en función de la evaluación condicional de numero.

Podemos hacer que este código sea más legible y seguro reemplazando fácilmente la declaración if-else con una construcción ternaria:

final String mensaje = numero > 10 
  ? "El número es mayor que 10" 
  : "El número es menor o igual a 10";

4. Evaluación de expresiones

Cuando utilizamos una construcción ternaria en Java, solo se evalúa una de las expresiones del lado derecho, es decir, expression1 o expression2, en tiempo de ejecución.

Podemos probar esto escribiendo un simple caso de prueba JUnit:

@Test
public void cuandoLaCondicionEsTrue_entoncesSoloLaPrimeraExpresionEsEvaluada() {
    int exp1 = 0, exp2 = 0;
    int resultado = 12 > 10 ? ++exp1 : ++exp2;
    
    assertThat(exp1).isEqualTo(1);
    assertThat(exp2).isEqualTo(0);
    assertThat(resultado).isEqualTo(1);
}

Nuestra expresión booleana 12 > 10 siempre se evalúa como true, por lo que el valor de exp2 se mantuvo sin cambios.

De manera similar, consideremos qué sucede en una condición falsa:

@Test
public void cuandoLaCondicionEsFalse_entoncesSoloLaSegundaExpresionEsEvaluada() {
    int exp1 = 0, exp2 = 0;
    int resultado = 8 > 10 ? ++exp1 : ++exp2;

    assertThat(exp1).isEqualTo(0);
    assertThat(exp2).isEqualTo(1);
    assertThat(resultado).isEqualTo(1);
}

El valor de exp1 no se modificó y el valor de exp2 se incrementó en 1.

5. Anidamiento del operador ternario

Es posible anidar nuestro operador ternario a cualquier nivel que elijamos.

Por lo tanto, esta construcción es válida en Java:

String mensaje = numero > 10 ? "El número es mayor que 10" : 
  numero > 5 ? "El número es mayor que 5" : "El número es menor o igual a 5";

Para mejorar la legibilidad del código anterior, podemos usar paréntesis () donde sea necesario:

String mensaje = numero > 10 ? "El número es mayor que 10" 
  : (numero > 5 ? "El número es mayor que 5" : "El número es menor o igual a 5");

Sin embargo, ten en cuenta que no se recomienda usar construcciones ternarias profundamente anidadas en el mundo real, ya que esto hace que el código sea menos legible y difícil de mantener.

6. Conclusión

En este breve artículo, aprendimos sobre el operador ternario en Java. Si bien no es posible reemplazar todas las declaraciones if-else con un operador ternario, es una gran herramienta para algunos casos y hace que nuestro código sea mucho más corto y legible.