CodeGym /Blogue Java /Random-PT /operador ternário
John Squirrels
Nível 41
San Francisco

operador ternário

Publicado no grupo Random-PT
Oi! A lição de hoje não será muito longa, mas com certeza será útil :) Vamos falar sobre o chamado operador ternário . Operador ternário - 1Ternário significa “ composto de três partes ”. É uma alternativa à if-elsedeclaração de fluxo de controle que você já conhece. Vamos dar um exemplo. Suponha que alguém decidiu assistir a um filme classificado como R (menores de 17 anos precisam de um dos pais ou responsável adulto). O porteiro verifica a idade na porta: se passou na verificação de idade, pode entrar; caso contrário, ele é mandado para casa. Vamos declarar uma Personclasse e verificar isso usando uma if-elsedeclaração:

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);

   }
}
Saída do console:

"Everything is in order. Come in!"
Se removermos a saída do console, nossa verificação ficará assim:

if (person.getAge() >= 18) {
           usherResponse = "Everything is in order. Come in!";
       } else {
           usherResponse = "This film is not suitable for your age!";
       }
A lógica é muito simples aqui: uma condição é verificada (idade >= 18) Com base no resultado, a variável usherResponserecebe uma das duas strings com a resposta do recepcionista. Tais situações ("uma condição - dois resultados possíveis") são extremamente comuns na programação. E é por isso que o operador ternário foi criado. Podemos usá-lo para simplificar nossa verificação em uma única linha 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);

}
Veja como esse operador funciona. É chamado de operador ternário, porque envolve 3 componentes:
  • Uma condição ( person.getAge() > 18)
  • Dois resultados possíveis ( "Tudo está em ordem. Entre!" e "Este filme não é adequado para sua idade!" )
Primeiro, escrevemos a condição, seguida de um ponto de interrogação.

person.getAge() > 18 ?
"A idade dessa pessoa é maior que 18 anos?" Então escrevemos o primeiro valor . Esse valor é usado se a condição for avaliada comotrue :

String usherResponse = person.getAge() > 18 ? "Everything is in order. Come in!"
A idade dessa pessoa é maior que 18 anos? Se sim, defina a usherResponse variável como "Tudo está em ordem. Entre!" A seguir vem o :símbolo " " e o segundo valor . Esse valor é usado se a condição for avaliada comofalse :

String usherResponse = person.getAge() > 18 ? "Everything is in order. Come in!" : "This film is not suitable for your age!";
A idade dessa pessoa é maior que 18 anos? Se sim, defina a usherResponse variável como "Tudo está em ordem. Entre!" . Caso contrário, defina a usherResponse variável como "Este filme não é adequado para sua idade!" Em geral, é assim que a lógica do operador ternário se parece. doença ? resultado 1 : resultado 2 Operador ternário - 2 A propósito, os parênteses em torno da condição não são necessários: nós os adicionamos para facilitar a leitura. Também funciona sem eles:

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);

}
Então, o que você deve usar? Uma if-elseinstrução ou o operador ternário? Em termos de desempenho, não há diferença. Mais precisamente, talvez haja, mas é insignificante. A maior consideração aqui é a legibilidade do seu código. O código que você escreve não deve apenas funcionar corretamente, mas também ser fácil de ler . Afinal, pode ser "herdado" por outros programadores, seus colegas! Se for difícil de entender, complicará o trabalho deles e o seu (eles virão correndo até você para obter explicações a cada 5 minutos). A recomendação geral é esta: se a condição for simples e facilmente verificada, você pode usar o operador ternário sem prejuízo. Isso permite reduzir a quantidade de código e o número deif-elsedeclarações (e pode já haver muitos deles). Mas se a condição for complexa e envolver várias etapas, é melhor usar uma if-elsedeclaração. Por exemplo, usar um operador ternário seria uma má ideia neste caso:

String usherResponse = (person.getAge() > 18 && (person.hasTicket() || person.hasCoupon()) && !person.hasChild()) ? "Come in!" : "You can't come in!";
Não é imediatamente aparente o que está acontecendo aqui! O código tornou-se muito difícil de ler. E tudo por causa da condição complexa:
  • Se alguém for maior de 18 anos, tiver ingresso (ou passe livre) e não tiver filhos pequenos, pode entrar.
  • Se pelo menos uma parte da condição for falsa, ele não poderá.
Aqui é claramente melhor usar if-else. Sim, nosso código será maior, mas será muito mais legível. E seus colegas não vão ficar na palma da mão se herdarem esse código :) Finalmente, posso recomendar um bom para você. Tocamos na legibilidade do código durante a lição. O livro "Clean Code" de Robert Martin, que se tornou um clássico, é dedicado a esse tópico. Operador ternário - 4Ele reúne as melhores práticas e recomendações para programadores, que o ajudarão a escrever um código que não seja apenas funcional, mas também de fácil leitura.
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION