Operador ternario en Java (Operador condicional)

El operador ternario en Java, también llamado operador condicional, es un operador que permite tomar una decisión simple dentro de una expresión.

Se puede utilizar en sustitución de la sentencia de control if-else como una alternativa más compacta para elegir entre dos valores.

El operador ternario lo forman los caracteres ? :

El nombre ternario se debe a que necesita tres operandos. Se utiliza de esta forma:

condición ? valor_si_se_cumple_la_condición : valor_si_no_se_cumple;

El operador condicional funciona de la siguiente forma:

  • Primero se evalúa la condición
  • Si la condición es true el operador devuelve el valor que aparece entre los caracteres ? y :
  • Si la condición es false devuelve el valor que aparece a continuación del carácter :

Operadores Java. Operador condicional o ternario en Java

Ejemplos de uso del operador ternario en Java

Ejemplo 1:

int i = 10, j;
j = i < 0 ? 0 : 100;

En este ejemplo se usa el operador ternario para asignar un valor a la variable j. El valor asignado será 0 ó 100 según se cumpla o no la condición i < 0.

El operador ternario actúa de esta forma: primero se evalúa la condición i < 0, si la condición es true, es decir, si el valor de i es menor que 0, devuelve el valor 0, si la condición es false devuelve el valor 100. Como la variable i vale 10, la condición es false por lo tanto el operador ternario devuelve el valor 100 que es el valor que se asigna a la variable j.

Esta instrucción con el operador ternario en Java equivale a esta instrucción if-else:

if(i < 0){
   j = 0;
} else {
   j = 100;
}

Ejemplo 2:

int a = 1, b = 2, c;
c = (a > 0 && a <= 10) ? a + 1 : b - 1;

En este ejemplo se ha usado el operador condicional o ternario para asignar un valor a la variable c.

El valor asignado a c será a + 1 o b – 1 dependiendo de que la condición a > 0 && a <= 10 sea verdadera o falsa. En este caso la condición es verdadera por lo que a la variable c se le asigna el resultado de la operación a + 1. El valor de c es 2.

La instrucción de asignación con el operador ternario equivale a esta instrucción if-else:

if(a > 0 && a <= 10){
   c = a + 1;
} else {
   c = b - 1;
}

Ejemplo 3:

int edad = 24;
String mensaje = (edad >= 18)  ? "Mayor de edad" : "Menor de edad" ;

Aquí se asignará a la variable mensaje de tipo String la cadena de texto «Mayor de edad» o «Menor de edad» según se cumpla o no la condición edad >= 18.

En el ejemplo la variable edad contiene el valor 24, por lo tanto la condición edad >= 18 es true y a la variable mensaje se le asigna «Mayor de edad».

La instrucción de asignación a la variable mensaje equivale a esta instrucción if-else:

if(edad >= 18){
   mensaje = "Mayor de edad";
} else {
   mensaje = "Menor de edad";
}

Ejemplo 4:

int a = 20, b = 15;
int mayor = (a > b) ? a : b;

En este ejemplo se asignará a la variable mayor de tipo int el valor mayor de a y b. Si a > b se asigna a la variable mayor el valor de a y si no se asigna a mayor el valor de b.

En este caso la condición a > b es true por lo que a mayor se le asigna el valor 20.

La instrucción de asignación a la variable mayor equivale a esta instrucción if-else:

if(a > b){
   mayor = a;
} else {
   mayor = b;
}

Ejemplo 5:

int x = 5;
System.out.println((x % 2 == 0) ? "PAR" : "IMPAR");

Este es un ejemplo de uso del operador ternario en Java para mostrar un mensaje u otro por consola, dependiendo del valor de una condición. En este caso se trata de indicar si la variable x contiene un número par o impar. Para ello el operador condicional se escribe dentro de la instrucción System.out.println(). Si la condición x % 2 == 0 es true se mostrará la palabra "PAR" y si es false se mostrará la palabra "IMPAR". Como la variable x contiene el valor 5, la condición es falsa y se muestra por consola «IMPAR».

La instrucción para mostrar por consola un mensaje mediante el operador ternario en Java es equivalente a esta instrucción if-else:

if(x % 2 == 0){
   System.out.println("PAR");
} else {
   System.out.println("IMPAR");
}

Ejemplo 6:

int a = 3, b = 5, c = 7;
c += (a > 3 && b > 3) ? a * b  : b / a;

Aquí se trata de sumarle a c el valor a * b o el valor b / a. Si la condición a > 3 && b > 3 es true se suma a * b. Si es false se suma a c el valor b / a.

Como a = 3 y b = 5 la condición es false por lo tanto se realiza la operación:

c +=  b / a;   que equivale a la instrucción ->  c = c + b / a    ->  c = 7 + 5 / 3  ->  c = 8   

El valor final de la variable c es 8.

La instrucción para incrementar la variable c mediante el operador condicional en Java es equivalente a esta instrucción if-else:

if(a > 3 && b > 3){
   c += a * b; 
} else {
   c += b / a;
}

Operadores ternarios anidados

Los operadores ternarios en Java se pueden anidar. Los operadores anidados aparecen cuando utilizamos un operador ternario dentro de otro, es decir, cuando una de las expresiones del operador ternario contiene a su vez otro operador ternario.

Los operadores pueden aparecer anidados tanto en la parte true del operador como en la parte false, es decir, el operador ternario en Java puede aparecer anidado en las siguientes zonas:

  • entre los caracteres ? y : es lo que llamaremos la zona true
  • después del carácter : es lo que llamaremos la zona false
  • en ambas zonas

Anidamiento en la zona true. Consiste en incluir otra condición cuando la condición principal se cumple.

La sintaxis general para anidar el operador ternario en la zona true es esta:

Operadores Java. Operador condicional compuesto. Operador ternario compuesto.

Ejemplo:

Supongamos que queremos clasificar un número de esta forma:

  • Si es positivo
    • Si es par mostrar por consola «Positivo par»
    • Si es impar mostrar «Positivo impar»
  • Si no es positivo mostrar por consola «No positivo»

Esto lo podemos resolver mediante operadores ternarios anidados de la siguiente forma:

String mensaje = (numero > 0) ? (numero % 2 == 0 ? "Positivo par" : "Positivo impar") : "No positivo";
System.out.println(mensaje);

Si, por ejemplo, la variable numero contiene el valor 9, la expresión se resuelve de esta forma:

Primero se evalúa la condición principal numero > 0
La variable numero contiene el valor 9, la condición principal es true
Como la condición principal es true el resultado de la expresión se obtendrá de evaluar esta parte numero % 2 == 0 ? "Positivo par" : "Positivo impar"
Como la variable numero contiene el valor 9, la condición numero % 2 == 0 es false
El valor que se devuelve es el String "Positivo impar"
A la variable mensaje se le asigna el String es "Positivo impar"

Si cambiamos el valor de la variable numero y le asignamos por ejemplo el valor 0, ahora la expresión se resolvería de esta forma:

Primero se evalúa la condición principal numero > 0
La variable numero contiene el valor 0, la condición principal es false
Como la condición principal es false se devuelve el String "No positivo"
A la variable mensaje se le asigna el String es "No positivo"

La instrucción con el operador ternario anidado en Java es equivalente a esta instrucción condicional:

if(numero > 0){
   if (numero % 2 == 0) {
        resultado = "Positivo par";
    } else {
        resultado = "Positivo impar";
    }
} else {
    resultado = "No positivo";
}

Anidamiento en la zona false. Consiste en incluir otra condición cuando la condición principal no se cumple.

La sintaxis general para anidar el operador ternario en la zona false es esta:

Operadores Java. Operador ternario anidado.

Ejemplo:

Supongamos que queremos determinar el descuento que vamos a aplicar en una compra según el siguiente criterio:

  • Si el importe de la compra es superior a 200€ se aplica un 20% de descuento
  • Si el importe está entre 100€ y 200€ (ambos incluidos) se aplica un 10% de descuento
  • Si el importe es inferior a 100€ se aplica un 5% de descuento

Esto lo podemos resolver mediante operadores ternarios anidados de la siguiente forma:

double descuento = (importe > 200) ? 0.20 : (importe >= 100 ? 0.10 : 0.05);

Si, por ejemplo, si la variable importe contiene el valor 300, la expresión se resuelve de esta forma:

Primero se evalúa la condición principal importe > 200
La variable importe contiene el valor 300, la condición principal es true
Como la condición principal es true se devuelve el valor 0.20
A la variable descuento se le asigna el valor 0.20

Si el valor de la variable importe fuese por ejemplo el 150, ahora la expresión se resolvería de esta forma:

Primero se evalúa la condición principal importe > 200
La variable importe contiene el valor 150, la condición principal es false
Como la condición principal es false el resultado de la expresión se obtendrá de evaluar esta parte importe >= 100 ? 0.10 : 0.05
Como la variable importe contiene el valor 150, la condición importe >= 100 es true
El valor que se devuelve es 0.10
A la variable descuento se le asigna el valor 0.10

Esta instrucción de asignación con el operador ternario anidado en Java es equivalente a esta instrucción condicional:

if(importe > 200){
   descuento = 0.20;
} else if(importe >= 100){
    descuento = 0.10;
} else {
   descuento = 0.05;
}

Anidamiento en ambas zonas Consiste en incluir una condición cuando la condición principal se cumple y otra condición cuando la condición principal del operador ternario no se cumple.

La sintaxis general para anidar el operador ternario en ambas zonas es esta:

operador ternario en Java anidado. operador condicional java anidado

Ejemplo:

Obtener el mayor de tres números. Supongamos que tenemos tres variables a, b, c que contienen un número entero. Queremos obtener el mayor de los tres números y asignarlo a una variable llamada mayor.

Para resolverlo mediante operadores ternarios anidados podemos escribir la siguiente instrucción:

int mayor = (a > b) ? (a > c ? a : c) : (b > c ? b : c);

Si los valores de a b y c son a = 20, b = -5 c = 30 la expresión se resuelve de esta forma:

Primero se evalúa la condición principal a > b
Los valores de a y b son a = 20 b = -5, la condición principal es true
Como la condición principal es true el resultado de la expresión se obtendrá de evaluar esta parte a > c ? a : c
Los valores de a y c son a = 20 c = 30, la condición a > c es false
El valor que se devuelve es el valor de c
A la variable mayor se le asigna el valor de c que es 30

Si los valores de a b y c son a = 3, b = 5 c = 4 la expresión se resuelve de esta forma:

Primero se evalúa la condición principal a > b
Los valores de a y b son a = 3 b = 5, la condición principal es false
Como la condición principal es false el resultado de la expresión se obtendrá de evaluar esta parte b > c ? b : c
Los valores de b y c son b = 5 c = 4, la condición b > c es true
El valor que se devuelve es el valor de b
A la variable mayor se le asigna el valor de b que es 5

La instrucción con operadores ternarios anidados para obtener el mayor de tres números es equivalente a esta instrucción condicional:

if(a > b){
   if(a > c){
      mayor = a;
   } else {
      mayor = c;
   }
} else if(b > c){
    mayor = b;
} else {
   mayor = c;
}

Como vemos en los ejemplos, el operador ternario anidado puede hacer que el código sea más conciso y evitar bloques if-else extensos cuando solo se necesita asignar un valor.

Sin embargo, también tiene desventajas importantes:

  • Reduce la legibilidad cuando se trata de expresiones largas
  • Dificulta el seguimiento del flujo de ejecución del programa
  • Más propenso a errores

Si una expresión ternaria necesita varias líneas, paréntesis complejos o múltiples condiciones anidadas, probablemente sea mejor usar una estructura if-else tradicional.

El operador ternario anidado se puede usar cuando:

  • La lógica es simple y al expresión resultante no es muy extensa
  • Se quiere asignar un valor en función de varias decisiones encadenadas sin producir una expresión demasiado compleja
  • Se busca una expresión compacta en contextos donde la claridad no se ve comprometida

El operador ternario anidado es una herramienta válida y potente, pero debe usarse con moderación. Es útil para simplificar decisiones pequeñas, pero si afecta a la claridad del código, la estructura condicional tradicional será siempre la mejor opción.

En programación, la claridad casi siempre es más importante que la brevedad.

Puedes encontrar más ejemplos de uso del operador ternario en Java o operador condicional en la entrada Ejercicios con el operador condicional en Java

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Scroll al inicio