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.