El operador ternario, también conocido como operador condicional, se denota con los símbolos ? y :. Su estructura es: expresión_booleana ? expresión1 : expresión2
- Si la expresión booleana se evalúa como
true, se devuelve expresión1; si esfalse, se devuelve expresión2. - Los tipos de datos resultantes de expresión1 y expresión2 deben coincidir con el tipo definido para la variable de asignación. Por ejemplo, si ambas expresiones producen valores de tipo
double, la variable de la izquierda debe ser de tipodouble.
Ejemplo básico del operador ternario en código Java:
/**
* Demostración del operador ternario
*/
public class DemoTernario {
public static void main(String[] args) {
byte primerValor = 20;
byte segundoValor = 30;
byte maximo = primerValor > segundoValor ? primerValor : segundoValor;
System.out.println("Máximo: " + maximo);
double importe1 = 45.75;
double importe2 = 30.28;
double mayorImporte = importe1 == importe2 ? importe1 : importe2;
System.out.println("Mayor importe: " + mayorImporte);
String cadena = "";
String estadoLongitud = cadena.length() == 0 ? "Longitud cero" : "Longitud no cero";
System.out.println("Estado: " + estadoLongitud);
}
}
El operador ternario puede anidarse, pero esta práctica reduce significativamente la legibilidad del código.
String texto = "JavaAvanzado";
int len = texto.length();
// Escritura anidada (no recomendada)
String evaluacion = len > 0 ? len < 10 ? "Longitud entre 0 y 10" : "Longitud mayor que 10" : "Longitud es 0";
System.out.println("Evaluación: " + evaluacion);
Una alternativa más clara evita el anidameinto:
String texto = "JavaAvanzado";
int len = texto.length();
String evaluacion = len > 0 && len < 10 ? "Longitud entre 0 y 10" : "Longitud fuera de rango";
System.out.println(evaluacion);
Comparación entre el operador ternario y la sentencia if
Similitudes: Ambos mecanismos sirven para la toma de decisiones basada en condiciones. Sin embargo, presentan diferencias clave:
- Sintaxis: El operador ternario normalmente se escribe en una línea, mientras que
ifpuede extenderse a múltiples líneas. Ejemplo de verificación de longitud de cadena:
// Usando operador ternario
String frase = "EjemploTernario";
String veredicto = frase.length() == 0 ? "Vacía" : "No vacía";
// Usando sentencia if
String frase = "EjemploTernario";
String veredicto;
if (frase.length() == 0) {
veredicto = "Vacía";
} else {
veredicto = "No vacía";
}
- Legibilidad: Para condiciones sencillas, el operador ternario simplifica el código, pero en escenarios complejos o con múltiples ramas, puede oscurecer la lógica.
- Flexibilidad: La sentencia
ifpermite ejecutar múltiples instrucciones en cada bloque, mientras que el operador ternario restringe cada rama a una única expresión.
En resumen, el operador ternario es idóneo para asignaicones condicionales breves, mientras que if es más apropiado para flujos de control extensos o complejos.
Precedencia de operadores
Cuando se combinan distintos tipos de operadores (aritméticos, de comparación, lógicos, etc.) en una expresión, se sigue un orden de precedencia que determina qué operación se realiza primero. Por ejemplo, en matemáticas, la multiplicación precede a la suma; en Java se aplica la misma regla.
Tabla de precedencia de operadores (orden descendente; se recomienda consultar según necesidad):
| Operador | Asociatividad |
|---|---|
| () [] | Izquierda a derecha |
| ! ~ ++ -- unarios | Derecha a izquierda |
| * / % | Izquierda a derecha |
| + - | Izquierda a derecha |
| << >> >>> | Izquierda a derecha |
| < <= > >= instanceof | Izquierda a derecha |
| == != | Izquierda a derecha |
| & | Izquierda a derecha |
| ^ | Izquierda a derecha |
| | | Izquierda a derecha |
| && | Iqzuierda a derecha |
| || | Izquierda a derecha |
| ?: | Derecha a izquierda |
| = += -= *= /= %= &= |= ^= <<= >>= >>>= | Derecha a izquierda |
Los paréntesis () pueden alterar la precedencia natural. Ejemplo:
int a = 30;
int b = 28;
int c = 17;
int sinParentesis = a * b + c; // Primero multiplicación, luego suma
int conParentesis = a * (b + c); // Paréntesis fuerza la suma primero
Sin paréntesis, la multiplicación tiene prioridad; al agrupar la suma con paréntesis, esta se evalúa antes de la multiplicación.