Pular para o conteúdo

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.
Luiz Antonio da Silva Junior JuNiOx
Hits: 36.215 Categoria: C/C++ Subcategoria: Introdução
  • Indicar
  • Impressora
  • Denunciar

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

   1. O "?" Alternativo

As vulnerabilidades do IRC

Instalando e Configurando o JAVA

#Vivaolinux, agora com canal IRC

Aprendendo e utilizando IRC

Como saber se houve uma invasão

Utilizando a função QSort em C

Inteiros e Strings na linguagem C

Introdução à linguagem C - Parte I

Linguagem C - O primeiro programa

Introdução à linguagem C - Parte II

#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

Entre na sua conta para comentar.