Operador condicional
- O mesmo algoritmo que testa se um número é par ou ímpar, agora com o operador '?:' (operador ternário ou condicional):
int a; a % 2 == 0 ? printf("o numero %d e par", a) : printf("o numero %d e impar", a);
O operador ?: simplifica a declaração if else numa única linha de código. Fica mais prático digitar uma interrogação e dois pontos. Há duas diferenças entre usar if else e o operador condicional: legibilidade e depuração. Para o primeiro, uma única linha de código é mais próxima da linguagem natural. Para o segundo, pode ser necessário a declaração if else para fins de depuração do fluxo do programa.
Há, no entanto, um empecilho: quando uma expressão condicional é formada a partir de uma pergunta e existe um número finito de respostas possíveis (perguntas sem resposta não contam), então é possível escrever a mesma coisa usando um operador condicional. Porém, se o par if else for usado para controlar o fluxo do programa. Como por exemplo quebrar um laço, então não há uma expressão correspondente com o uso do operador condicional. Isto advém de uma diferença muito sutil: expressões são algo para ser avaliado (toda a linha de código escrita com o operador condicional é considerada uma expressão). Há um resultado associado a elas, enquanto instruções não incorrem numa avaliação per se. Variáveis podem ser declaradas e instruções como 'break' e 'return' podem ser usadas dentro de blocos if else, mas não dentro de expressões condicionais. Por outro lado, o operador condicional pode ser usado dentro de um if else e até mesmo ser a própria expressão condicional de uma instrução 'if'.
Um outro caso onde if else não pode ser traduzido diretamente para uma expressão com operador condicional: há casos em que existe uma sentença do tipo 'if' sem um 'else', ou mais de um 'if' e todos eles podem ser simultaneamente verdadeiros. Num caso assim a expressão que efetivamente preenche o espaço que seria preenchido pelo 'else' é qualquer expressão sem efeito como a = a
. Adicionar uma expressão sem efeito no espaço do 'else' faltante quando o operador condicional é usado é um desperdício de processamento.
Em termos de desempenho, o operador condicional pode ser ou pode não ser idêntico ao if else. O código de baixo nível precisaria ser verificado para checar se existem diferenças entre um e outro. Mas, para este nível introdutório, a performance não importa.