Oi! A lição de hoje não será muito longa, mas com certeza será útil :) Vamos falar sobre o chamado operador ternário .
Ternário significa “ composto de três partes ”. É uma alternativa à
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:
Ele 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.

if-else
declaraçã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 Person
classe e verificar isso usando uma if-else
declaraçã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 usherResponse
recebe 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!" )
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 
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-else
instruçã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-else
declarações (e pode já haver muitos deles). Mas se a condição for complexa e envolver várias etapas, é melhor usar uma if-else
declaraçã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á.
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. 
GO TO FULL VERSION