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: 35.417 ]

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

Canal #Vivaolinux com bot interativo

#Vivaolinux, agora com canal IRC

Analisando arquivos de registro (log)

Os Vírus e o Linux

Explorando NFS mal configurado

Leitura recomendada

Bibliotecas estáticas c/c++

Introdução à linguagem C - Parte II

Mais sobre recursividade em C/C++

Funcionamento da memória

Linguagem C - O primeiro programa

  
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

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts