JavaRush /Blogue Java /Random-PT /Operador ternário em Java

Operador ternário em Java

Publicado no grupo Random-PT
Olá! A palestra de hoje não será muito longa, mas definitivamente útil :) Falaremos sobre o chamado operador ternário . Operador ternário - 1“Ternário” significa “triplo”. Esta é uma alternativa ao operador condicional if-else, com o qual você já está familiarizado. Vamos dar um exemplo. Digamos que uma pessoa decida ir ao cinema para ver um filme com classificação para maiores de 18 anos. O guarda verifica a sua idade na entrada: se cumprir o limite de idade, permite-lhe entrar no salão; caso contrário, manda-o para casa. Vamos criar uma classe Mane verificá-la com 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 = "It's all right, come in!";
       } else {
           securityAnswer = "This movie is not suitable for your age!";
       }

       System.out.println(securityAnswer);

   }
}
Saída do console:

"Все в порядке, проходите!"
Se removermos a saída do console, nosso teste ficará assim:
if (man.getAge() >= 18) {
           securityAnswer = "It's all right, come in!";
       } else {
           securityAnswer = "This movie is not suitable for your age!";
       }
Aqui, de fato, funciona uma lógica simples: uma condição é verificada (idade >= 18). Dependendo disso, securityAnsweruma das duas linhas com a resposta do guarda é atribuída à variável. Tais situações, “uma condição – dois resultados possíveis”, ocorrem com muita frequência na programação. Portanto, o mesmo operador ternário foi criado para eles. Com ele, podemos simplificar nossa verificação em uma linha de código:
public static void main(String[] args) {

   Man man = new Man(22);

   String securityAnswer = (man.getAge() >= 18) ? "It's all right, come in!" : "This movie is not suitable for your age!";

   System.out.println(securityAnswer);

}
É assim que se parece o trabalho deste operador. É denominado ternário (triplo) porque 3 componentes participam de seu trabalho:
  • Uma condição ( man.getAge() >= 18)
  • Dois resultados possíveis ( “Tudo bem, siga em frente!” e “Este filme não é adequado para sua idade!” )
Primeiro, uma condição é escrita no código, seguida por um ponto de interrogação.
man.getAge() >= 18 ?
“A idade da pessoa é maior ou igual a 18 anos?” A seguir está o primeiro resultado. Ele dispara se a condição retornar true, ou seja, for verdadeira:
String securityAnswer = man.getAge() >= 18 ? "It's all right, come in!"
A idade da pessoa é maior ou igual a 18 anos? Se sim, atribua à variável securityAnswer o valor “Está tudo bem, entre!” . Isto é seguido pelo :operador “”, após o qual o segundo resultado é escrito. Ele dispara se a condição retornar false, ou seja, for falsa:
String securityAnswer = man.getAge() >= 18 ? "It's all right, come in!" : "This movie is not suitable for your age!";
A idade da pessoa é maior ou igual a 18 anos? Se sim, atribua à variável securityAnswer o valor “Está tudo bem, entre!” . Caso contrário, atribua à variável securityAnswer o valor “Este filme não é adequado para a sua idade!” É assim que se parece a lógica geral do operador ternário. doença ? resultado 1: resultado 2 Operador ternário - 2A propósito, não é necessário colocar parênteses em torno da condição: fizemos isso para maior legibilidade. Funcionará sem eles:
public static void main(String[] args) {

   Man man = new Man(22);

   String securityAnswer = man.getAge() >= 18 ? "It's all right, come in!" : "This movie is not suitable for your age!";

   System.out.println(securityAnswer);

}
O que você deve usar: if-elseou o operador ternário? Em termos de desempenho não há muita diferença. Mais precisamente, pode existir, mas é insignificante. Aqui a questão está mais relacionada à legibilidade do seu código. É extremamente importante na programação: o código que você escreve não só deve funcionar corretamente, mas também ser fácil de ler. Afinal, ele pode ser “herdado” para outros programadores, seus colegas! E se for difícil de entender, vai complicar tanto o trabalho deles quanto o seu - eles correrão até você para obter explicações a cada 5 minutos. Uma recomendação geral pode soar assim: se a condição for simples e fácil de verificar, você poderá usar o operador ternário sem danos. Dessa forma você reduzirá a quantidade de código e o número de verificações if-else, que já podem ser muitas. Mas se a condição for complexa e multiestágio, é melhor usar if-else. Por exemplo, neste caso seria uma má ideia usar o operador ternário:
String securityAnswer = (man.getAge() >= 18 && (man.hasTicket() || man.hasCoupon()) && !man.hasChild())  ? "Come in!" : "You can not pass!";
Então você não entenderá imediatamente o que está acontecendo aqui! O código tornou-se muito difícil de ler. E tudo por causa de uma condição difícil:
  • Se a pessoa for maior ou igual a 18 anos + tiver ingresso (ou tiver cupom de entrada gratuita) + não tiver filhos pequenos consigo - então pode passar.
  • Se pelo menos uma parte da condição retornar falso, então ela não poderá.
É aqui que seria claramente melhor usar if-else. Sim, nosso código seria maior, mas seria muitas vezes mais legível. E nenhum de seus colegas vai apertar a cabeça se herdar esse código :) Finalmente, posso recomendar o livro. Na palestra abordamos o tópico da legibilidade do código. O clássico livro “Clean Code” de Robert Martin é dedicado a ela. Operador ternário - 3Ele contém práticas recomendadas e recomendações para programadores que permitirão que você escreva não apenas código funcional, mas também código fácil de ler. Há uma resenha deste livro no JavaRush.
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION