Operador Ternario ou if/else [RESOLVIDO]

Qual a vantagem que o operador ternário leva em cima do if/else ?

Atenciosamente,
Fernando.

Sabes eu nem uso o operador ternario, primeiro porque não acho que me da vantagem visto que em algumas linguagens não se usa, e eu como mexo com varias linguagens prefiro apenas usar aquilo que na maioria funciona, e segundo porque não gosto de usar, e acho que põe o código menos claro ( menos claro porque alguns programadores não conhecem este operador, e porque expressões complexas com o operador ternario acho que fica mais dificil de analisar).

Mas como em tudo eu me preocupo em saber quando e porque devo usar, e ai vai.
Devemos usar o operador ternario sempre que tivemos uma expressão condicional muito simples e acharmos que iremos poupar digitação de código.

Possa ser que eu estou errado, mas não acho um codigo fica bonito se tiver por ai muitos operadores ternarios

o Sulito está certo qto a questão do excesso de operadores ternarios dificulta a legibilidade, porém if else if else tbm não fica la muito legivel não.

Eu gosto de usar o operador ternario tendo na maximo 3 avaliações, mas que isso, adapto para usar OO ou uso um Switch ou if mesmo :stuck_out_tongue:

Eu só uso o ternário quando existe uma única comparação. Nesse caso, ele traz mais legibilidade, e muitas vezes evita a criação de uma variável temporária. Fora que sua sintaxe é bem mais compacta.

Só lembrando, o if…else são comandos (statements) enquanto o operador ternário é um operador. Ou seja, ele retorna valor, enquanto o if e o else não. É possível usar o operador ternário diretamente numa chamada de função, por exemplo, enquanto o if…else teria que duplicar a chamada.

Exemplo

label.setCor(destaque ? Color.RED : Color.BLUE);

Para fazer isso com if, ou duplica-se a chamada:

if (destaque) { label.setCor(Color.RED); } else { label.setCor(Color.BLUE); }

Ou cria-se uma variável temporária:

[code]
Color cor;

if (destaque) {
cor = Color.RED;
} else {
cor = COLOR.BLUE;
}
label.setCor(cor);[/code]

Em ambos os casos, existe muito mais código e a legibilidade fica bem pior. Especialmente se você tiver mais comparações desse tipo.

Sulito, que linguagem você usa que não tem o operador ternário?

Oi,

Essa é uma grande diferença. Sempre que possível o utilizo, mesmo quando existe + de uma comparação.

Tchauzin!

[quote=ViniGodoy]Eu só uso o ternário quando existe uma única comparação. Nesse caso, ele traz mais legibilidade, e muitas vezes evita a criação de uma variável temporária. Fora que sua sintaxe é bem mais compacta.

Só lembrando, o if…else são comandos (statements) enquanto o operador ternário é um operador. Ou seja, ele retorna valor, enquanto o if e o else não. É possível usar o operador ternário diretamente numa chamada de função, por exemplo, enquanto o if…else teria que duplicar a chamada.

Exemplo

label.setCor(destaque ? Color.RED : Color.BLUE);

Para fazer isso com if, ou duplica-se a chamada:

if (destaque) { label.setCor(Color.RED); } else { label.setCor(Color.BLUE); }

Ou cria-se uma variável temporária:

[code]
Color cor;

if (destaque) {
cor = Color.RED;
} else {
cor = COLOR.BLUE;
}
label.setCor(cor);[/code]

Em ambos os casos, existe muito mais código e a legibilidade fica bem pior. Especialmente se você tiver mais comparações desse tipo.

Sulito, que linguagem você usa que não tem o operador ternário?[/quote]

eu não tenho bem certeza porque na verdade nunca me interessei em investigar o operador ternario noutras linguagens, mas o Visual basic, o pascal, acho que não tem

O Visual Basic 6 não tem, mas eles acoxambraram um com a função iif.

[code]
dim nome as String

nome = iif(nomeUsuario = null, “Anônimo”, nomeUsuario);[/code]

O problema é que, como se trata de uma função, ambos os lados devem ser avaliados, mesmo que só um deles seja usado. No VB 9 em diante, existe o operador if():

nome = if(usuario = null, "Anônimo", usuario.Nome);

No pascal e no Delphi o operador realmente não existe.

Eu já não costumo usar o ternário. Quando fiz um curso de java J2SE eu aprendi a usa-lo, mas geralmente esqueço que ele existe, hehe.

Uma vez fui dar uma manutenção em um aplicação de outro programador e estava tomada por operador ternário, dai tive que procurar algo sobre o assunto, pq não lembrava mais como funcionava.

Mas até hj eu não utilizo ele em meus códigos, talvez por falta de costume mesmo. Muito boa a explicação do ViniGodoy.

Adoro operador ternário, uso sempre que possível mas sem exagerar, assim como o mesmo vale pra if…else clássico.

Na minha opinião o operador ternário tornou meu código muito mais legível e enxuto e se o programador que for dar manutenção não entender vai ter que estudar, afinal isso é um tanto básico… e mesmo que a pessoa não o conheça é suficientemente simples pra que ela aprenda rapidinho e sem galhos.

Abraços.

Fico grato pela colaboração de todas as respostas.

[quote]No pascal e no Delphi o operador realmente não existe.
[/quote]

Apenas para conhecimento, o delphi tem o IfThen

nome := IfThen(nomeUsuario = '', 'Anônimo', nomeUsuario);

Att