Para substituir comandos "if-else" na forma geral, podemos utilizar o operador "?".
A forma geral do if-else é:
if (condição) expressão;
else expressão;
O ? recebe o nome de operador ternário pois necessita de 3 operandos.
Sua forma geral é:
expressao1 ? expressao2 : expressao3
(note o uso e o posicionamento do dois pontos)
Essa expressão terá a seguinte lógica:
expressao1 será avaliada;
Se verdadeira, expressao2 será avaliada e se tornará o valor da expressão
? Inteira;
Se expressao1 for falsa, então expressao3 será avaliada e se torna o valor
da expressão.
Exemplo:
x = 10
y = x>9 ? 100 : 200
Nesse exemplo, y recebe o valor 100. Se x fosse menor que 9, y teria recebido
o valor 200. Agora, vamos escrever o mesmo código usando os comandos if-else:
x = 10;
if (x>9)
y = 100;
else
y = 200;
Notaram a economia de código no primeiro exemplo? :)
[1] Comentário enviado por cesarcardoso em 25/06/2003 - 10:28h
Só uma observação: é necessário cuidado ao utilizar o ? alternativo, porque rapidamente seu código pode ficar espaguete; muita gente inclusive desaconselha o uso dele.
Comente bem antes de fazer. Não faça da falta de comentários no código uma arma, a vítima pode ser você! :-)
[6] Comentário enviado por pirata em 09/04/2004 - 01:32h
Achei o artigo interessante, uma vez que trabalho com programação pra microcontroladores, 1 kb pra mim, é precioso , quanto mais puder enchugar, melhor é...
[7] Comentário enviado por ron_lima em 24/11/2004 - 07:24h
O operador ternário não economiza código assemblado. Tomando o exemplo do artigo:
/* If normal */
if (x>9)
y = 100;
else
y = 200;
/* Operador ternário */
y = x > 9 ? 100 : 200;
Ambas as construções serão assembladas da mesma forma, ou seja, haverá uma instrução de teste (para a operação relacional maior), um salto caso a operação seja verdadeira e outro salto caso seja falsa.
A grande vantagem do operador ternário é deixar o código-fonte mais compacto. Para o código executável, não há vantagem visto que os compiladores e otimizadores vão gerar o mesmo código-objeto. Como disse o César, o mau uso da construção pode levar a um código espaguete, principalmente se vários operadores ternários forem aninhados.
O uso mais comum para este operador é para decisões simples em comandos de atribuição, como magnificamente mostrado no exemplo do artigo. Outro uso muito comum é na elaboração de macros que geram código in-line: o operador ternário evita construções desagradáveis para as macros.
Como tudo em linguagem C, é algo maravilhoso mas que tem de ser usado com critério. Infelizmente, C é uma linguagem que exige disciplina por parte dos programadores visto que é uma linguagem extremamente flexível. Também, não existe remédio contra programador indisciplinado...
[8] Comentário enviado por matthauss em 29/08/2006 - 08:39h
é um recurso muito bom (pois economiza algumas linhas de codigo). Agora, pr exemplo eu já me acostumei a escrever if-else e quando vejo a linha desse jeito ainda tenho uns milesimos de lag pra entender!!! hehehehe
[11] Comentário enviado por tralsl em 17/02/2007 - 22:20h
uma das grandes mudanças quando passei a utilizar esse recurso foi quando precisava fazer algum debug linha a linha
quando o operador ternário estava lá ele juntava tudo e naum consegui ver onde ocorria o erro
por isso em mantinha um código com if-else comentado equivalente ao do operador ternario
mas dava muito trabalho e naum tinha pq continuar usando o '?'
comecei a usar por ser bunitinho e parei por desgosto