CodeGym /Blog Java /Random-ES /operador ternario
Autor
Vasyl Malik
Senior Java Developer at CodeGym

operador ternario

Publicado en el grupo Random-ES
¡Hola! La lección de hoy no será muy larga, pero definitivamente será útil :) Vamos a hablar sobre el llamado operador ternario . Operador ternario - 1Ternario significa " compuesto de tres partes ". Es una alternativa a la if-elsedeclaración de flujo de control que ya conoce. Demos un ejemplo. Supongamos que alguien decide ir a una película con clasificación R (menores de 17 años requieren un padre o tutor adulto que lo acompañe). El ujier comprueba su edad en la puerta: si pasó el control de edad, se le permite entrar; si no, es enviado a casa. Declaremos una Personclase y verifiquemos esto usando una if-elsedeclaración:

public class Person {

   private int age;

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

   public int getAge() {
       return age;
   }

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

   public static void main(String[] args) {

       Person person = new Person(22);

       String usherResponse;

       if (person.getAge() >= 18) {
           usherResponse = "Everything is in order. Come in!";
       } else {
           usherResponse = "This film is not suitable for your age!";
       }

       System.out.println(usherResponse);

   }
}
Salida de la consola:

"Everything is in order. Come in!"
Si eliminamos la salida de la consola, nuestra verificación se verá así:

if (person.getAge() >= 18) {
           usherResponse = "Everything is in order. Come in!";
       } else {
           usherResponse = "This film is not suitable for your age!";
       }
La lógica es muy simple aquí: se verifica una condición (edad >= 18) Según el resultado, a la variable usherResponsese le asigna una de dos cadenas con la respuesta del ujier. Tales situaciones ("una condición, dos resultados posibles") son extremadamente comunes en la programación. Y por eso se creó el operador ternario. Podemos usarlo para simplificar nuestra verificación a una sola línea de código:

public static void main(String[] args) {

   Person person = new Person(22);

   String usherResponse = (person.getAge() > 18) ? "Everything is in order. Come in!" : "This film is not suitable for your age!";

   System.out.println(usherResponse);

}
Así es como funciona este operador. Se llama el operador ternario, porque involucra 3 componentes:
  • Una condición ( person.getAge() > 18)
  • Dos posibles resultados ( "Todo está en orden. ¡Pasa!" y "¡Esta película no es adecuada para tu edad!" )
Primero, escribimos la condición, seguida de un signo de interrogación.

person.getAge() > 18 ?
"¿La edad de esta persona es mayor de 18 años?" Luego escribimos el primer valor . Este valor se utiliza si la condición se evalúa comotrue :

String usherResponse = person.getAge() > 18 ? "Everything is in order. Come in!"
¿La edad de esta persona es mayor de 18 años? En caso afirmativo, establezca la usherResponse variable en "Todo está en orden. ¡Adelante!" Luego viene el :símbolo " " y el segundo valor . Este valor se utiliza si la condición se evalúa comofalse :

String usherResponse = person.getAge() > 18 ? "Everything is in order. Come in!" : "This film is not suitable for your age!";
¿La edad de esta persona es mayor de 18 años? En caso afirmativo, establezca la usherResponse variable en "Todo está en orden. ¡Adelante!" . De lo contrario, establezca la usherResponse variable en "¡Esta película no es adecuada para su edad!" En general, así es como se ve la lógica del operador ternario. condición ? resultado 1 : resultado 2 Operador ternario - 2 Por cierto, los paréntesis alrededor de la condición no son obligatorios: los añadimos para facilitar la lectura. También funciona sin ellos:

public static void main(String[] args) {

   Person person = new Person(22);

   String usherResponse = person.getAge() > 18 ? "Everything is in order. Come in!" : "This film is not suitable for your age!";

   System.out.println(usherResponse);

}
Entonces, ¿qué debes usar? ¿Una if-elsesentencia o el operador ternario? En términos de rendimiento, no hay diferencia. Más exactamente, tal vez lo haya, pero es insignificante. La mayor consideración aquí es la legibilidad de su código. El código que escribas no solo debe funcionar correctamente, sino que también debe ser fácil de leer . Después de todo, podría ser "heredado" por otros programadores, ¡sus colegas! Si es difícil de entender, complicará su trabajo y el tuyo (vendrán corriendo a pedirte explicaciones cada 5 minutos). La recomendación general es esta: si la condición es simple y fácil de verificar, puede usar el operador ternario sin daño. Esto le permite reducir la cantidad de código y el número deif-elsedeclaraciones (y puede que ya haya muchas). Pero si la condición es compleja e involucra múltiples pasos, es mejor usar una if-elsedeclaración. Por ejemplo, usar un operador ternario sería una mala idea en este caso:

String usherResponse = (person.getAge() > 18 && (person.hasTicket() || person.hasCoupon()) && !person.hasChild()) ? "Come in!" : "You can't come in!";
¡No es evidente de inmediato lo que está sucediendo aquí! El código se ha vuelto muy difícil de leer. Y todo debido a la condición compleja:
  • Si alguien es mayor de 18 años, tiene una entrada (o un pase gratuito) y no tiene niños pequeños, puede entrar.
  • Si incluso una parte de la condición es falsa, entonces no puede.
Aquí es claramente mejor usar if-else. Sí, nuestro código será más grande, pero será mucho más legible. Y sus colegas no se enfrentarán a la palma de la mano si heredan este código :) Finalmente, puedo recomendarle una buena. Hablamos de la legibilidad del código durante la lección. El libro de Robert Martin "Clean Code", que se ha convertido en un clásico, está dedicado a este tema. Operador ternario - 4Reúne las mejores prácticas y recomendaciones para programadores, que lo ayudarán a escribir código que no solo sea funcional, sino también fácil de leer.
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION