O ? Alternativo em C/C++

Nesse artigo, mostrarei a utilização do "?" como alternativa ao uso do "if-else", uma alternativa que pode reduzir algumas linhas de comandos.

[ Hits: 28.361 ]

Por: Luiz Antonio da Silva Junior em 25/06/2003


O "?" Alternativo



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:
  1. expressao1 será avaliada;
  2. Se verdadeira, expressao2 será avaliada e se tornará o valor da expressão ? Inteira;
  3. 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? :)

abraços
JuNiOx

   

Páginas do artigo
   1. O "?" Alternativo
Outros artigos deste autor

As vulnerabilidades do IRC

Os usuários do Linux

Explorando NFS mal configurado

Analisando arquivos de registro (log)

Como saber se houve uma invasão

Leitura recomendada

Introdução à linguagem C - Parte IV

Introdução à ponteiros em C

Criando uma calculadora com o KDevelop

Introdução a GTK+ em C

Introdução à linguagem C - Parte II

  
Comentários
[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ê! :-)

[2] Comentário enviado por fabio em 25/06/2003 - 17:10h

Por acaso a sintaxe abaixo (que nem no PHP, Perl) funcionaria?

x = 10
x>9 ? y = 100 : y = 200

[3] Comentário enviado por JuNiOx em 26/06/2003 - 01:44h

não..., a forma correta seria:

variavel = decisão ? valor_verdadeiro : valor_falso

[4] Comentário enviado por asphp em 22/07/2003 - 15:49h

para exclarecer esse "?" tem nome!!! eh o operador ternário.. evitem entao de chama-lo de "?" (interrogacao)... isso nao tem nada a ve heheh :)))

[5] Comentário enviado por JuNiOx em 14/08/2003 - 15:43h

o operator ternário funciona da mesma forma em JAVA, idêntico.

[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

[9] Comentário enviado por tiagotavares em 16/10/2006 - 14:28h

Hahaha Cacildis!

[10] Comentário enviado por alexlucena em 04/12/2006 - 12:06h

legal =]

[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

[12] Comentário enviado por isabeladeoliveir em 07/03/2007 - 12:55h

Adorei as dicas, muito boas!! Tô começando com programação agora, e estou adorando...Bjosss

[13] Comentário enviado por f_Candido em 09/07/2007 - 16:21h

Bem interessante, no entanto, no início confunde bastante.

[14] Comentário enviado por removido em 05/02/2010 - 16:30h

legal ;)

[15] Comentário enviado por snowbg em 12/03/2013 - 13:43h

Muito bom, cara!!!
Obrigado pelo ensinamento!!!

Fiquei sabendo que esse macete é muito bom pra usar no DEFINE.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts