Operador ternario en Java

1. Información general

El operador condicional ternario ?: Nos permite definir expresiones en Java. Es una forma condensada de la declaración if-else que también devuelve un valor.

En este tutorial, aprenderemos cuándo y cómo usar una construcción ternaria. Comenzaremos mirando su sintaxis y luego exploraremos su uso.

2. Sintaxis

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

booleanExpression ? expression1 : expression2

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

3. Ejemplo de operador ternario

Consideremos la siguiente construcción if-else :

int num = 8; String msg = ""; if(num > 10) { msg = "Number is greater than 10"; } else { msg = "Number is less than or equal to 10"; }

En el código anterior, hemos asignado un valor a msg basado en la evaluación condicional de num . Podemos hacer que este código sea más legible y seguro reemplazando fácilmente la instrucción if-else con una construcción ternaria:

final String msg = num > 10 ? "Number is greater than 10" : "Number is less than or equal to 10";

4. Evaluación de expresiones

Cuando se utiliza una construcción ternaria de Java, solo una de las expresiones del lado derecho, es decir, expresión1 o expresión2, se evalúa en tiempo de ejecución .

Podemos probar eso escribiendo un simple caso de prueba JUnit :

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

Nuestra expresión booleana 12> 10 siempre se evalúa como verdadera, por lo que el valor de exp2 permanece como está. De manera similar, consideremos lo que sucede con una condición falsa :

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

El valor de exp1 permaneció intacto y el valor de exp2 se incrementó en 1.

5. Operador ternario de anidación

Es posible para nosotros anidar nuestro operador ternario en cualquier número de niveles de nuestra elección. Entonces la construcción:

String msg = num > 10 ? "Number is greater than 10" : num > 5 ? "Number is greater than 5" : "Number is less than equal to 5";

es válido en Java. Para mejorar la legibilidad del código anterior, podemos usar llaves (), siempre que sea necesario:

String msg = num > 10 ? "Number is greater than 10" : (num > 5 ? "Number is greater than 5" : "Number is less than equal to 5");

Sin embargo , tenga en cuenta que no se recomienda utilizar construcciones ternarias tan profundamente anidadas en el mundo real. Esto es así porque hace que el código sea menos legible y difícil de mantener.

6. Conclusión

En este tutorial rápido, aprendimos sobre el operador ternario en Java. No es posible reemplazar todas las construcciones if-else con un operador ternario. Sin embargo, es una gran herramienta para algunos casos y hace que nuestro código sea mucho más corto y legible.

Como de costumbre, todo el código fuente está disponible en Github.