JavaRush /Blog Java /Random-ES /Operador ternario en Java

Operador ternario en Java

Publicado en el grupo Random-ES
¡Hola! La conferencia de hoy no será muy larga, pero definitivamente será útil :) Hablaremos sobre el llamado operador ternario . Operador ternario - 1"Ternario" significa "triple". Esta es una alternativa al operador condicional if-else, con el que ya está familiarizado. Pongamos un ejemplo. Digamos que una persona decide ir al cine a ver una película con clasificación para mayores de 18 años. El guardia comprueba su edad en la entrada: si cumple el límite de edad, le permite entrar al salón; si no, lo envía a casa. Creemos una clase Many verifiquémosla con if-else:
public class Man {

   private int age;

   public Man(int age) {
       this.age = age;
   }

   public int getAge() {
       return age;
   }

   public void setAge(int age) {
       this.age = age;
   }

   public static void main(String[] args) {

       Man man = new Man(22);

       String securityAnswer;

       if (man.getAge() >= 18) {
           securityAnswer = "¡Está bien, entra!";
       } else {
           securityAnswer = "¡Esta película no es adecuada para tu edad!";
       }

       System.out.println(securityAnswer);

   }
}
Salida de consola:

"Все в порядке, проходите!"
Si eliminamos la salida a la consola, nuestra prueba se verá así:
if (man.getAge() >= 18) {
           securityAnswer = "¡Está bien, entra!";
       } else {
           securityAnswer = "¡Esta película no es adecuada para tu edad!";
       }
Aquí, de hecho, funciona una lógica simple: se verifica una condición (edad >= 18). Dependiendo de esto, securityAnswera la variable se le asigna una de las dos líneas con la respuesta del guardia. Este tipo de situaciones, “una condición, dos resultados posibles”, ocurren muy a menudo en la programación. Por lo tanto, se creó para ellos el mismo operador ternario. Con él, podemos simplificar nuestra verificación a una línea de código:
public static void main(String[] args) {

   Man man = new Man(22);

   String securityAnswer = (man.getAge() >= 18) ? "¡Está bien, entra!" : "¡Esta película no es adecuada para tu edad!";

   System.out.println(securityAnswer);

}
Así es el trabajo de este operador. Se llama ternario (triple) porque en su trabajo intervienen 3 componentes:
  • Una condición ( man.getAge() >= 18)
  • Dos resultados posibles ( "¡Está bien, sigue adelante!" y "¡Esta película no es adecuada para tu edad!" )
Primero, se escribe una condición en el código, seguida de un signo de interrogación.
man.getAge() >= 18 ?
“¿La edad de la persona es mayor o igual a 18 años?” El siguiente es el primer resultado. Se activa si la condición regresa true, es decir, es verdadera:
String securityAnswer = man.getAge() >= 18 ? "¡Está bien, entra!"
¿La edad de la persona es mayor o igual a 18 años? En caso afirmativo, asigne a la variable securityAnswer el valor "¡Todo está bien, adelante!" . A esto le sigue el :operador “ ”, después del cual se escribe el segundo resultado. Se dispara si la condición devuelve false, es decir, es falsa:
String securityAnswer = man.getAge() >= 18 ? "¡Está bien, entra!" : "¡Esta película no es adecuada para tu edad!";
¿La edad de la persona es mayor o igual a 18 años? En caso afirmativo, asigne a la variable securityAnswer el valor "¡Todo está bien, adelante!" . En caso contrario, asigna a la variable securityAnswer el valor “¡Esta película no es adecuada para tu edad!” Así es como se ve la lógica general del operador ternario. condición ? resultado 1: resultado 2 Operador ternario - 2Por cierto, no es necesario poner paréntesis alrededor de la condición: hicimos esto para una mayor legibilidad. Funcionará sin ellos:
public static void main(String[] args) {

   Man man = new Man(22);

   String securityAnswer = man.getAge() >= 18 ? "¡Está bien, entra!" : "¡Esta película no es adecuada para tu edad!";

   System.out.println(securityAnswer);

}
¿Qué deberías usar: if-elseo el operador ternario? En términos de rendimiento no hay mucha diferencia. Más precisamente, puede que exista, pero es insignificante. Aquí la pregunta se relaciona más bien con la legibilidad de su código. Es extremadamente importante en programación: el código que escribas no sólo debe funcionar correctamente, sino también ser fácil de leer. Después de todo, ¡puede ser "heredado" por otros programadores, sus colegas! Y si es difícil de entender, complicará tanto su trabajo como el suyo: acudirán a usted en busca de explicaciones cada 5 minutos. Una recomendación general podría ser la siguiente: si la condición es simple y fácil de verificar, puede utilizar el operador ternario sin sufrir daños. De esta forma reducirás la cantidad de código y el número de cheques if-else, de los cuales puede que ya sean muchos. Pero si la condición es compleja y de varias etapas, es mejor usar if-else. Por ejemplo, en este caso sería mala idea utilizar el operador ternario:
String securityAnswer = (man.getAge() >= 18 && (man.hasTicket() || man.hasCoupon()) && !man.hasChild())  ? "¡Adelante!" : "¡No puede pasar!";
¡Así que no entenderás de inmediato lo que está pasando aquí! El código se ha vuelto muy difícil de leer. Y todo por una condición difícil:
  • Si una persona tiene 18 años o más + tiene un boleto (o tiene un cupón de entrada gratuita) + no tiene niños pequeños con ellos, entonces puede pasar.
  • Si al menos una parte de la condición devuelve falso, entonces no puede.
Aquí es donde claramente sería mejor utilizar if-else. Sí, nuestro código sería más grande, pero sería muchas veces más legible. Y ninguno de tus colegas se agarrará la cabeza si heredan ese código :) Finalmente, puedo recomendarte el libro. En la conferencia tocamos el tema de la legibilidad del código. A ella está dedicado el libro clásico “Clean Code” de Robert Martin. Operador ternario - 3Contiene mejores prácticas y recomendaciones para programadores que le permitirán escribir código no solo funcional, sino también fácil de leer. Hay una reseña de este libro en JavaRush.
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION