Olá! A palestra de hoje não será muito longa, mas definitivamente útil :) Falaremos sobre o chamado operador ternário . “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 Man
e 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, securityAnswer
uma 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!” )
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 A 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-else
ou 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á.
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. Ele 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.
GO TO FULL VERSION