Comparando o uso dos comandos if e switch em Cpp

Os comandos if e switch estão classificados na categoria de controle de fluxo, com base em critérios de decisão que definem diferentes alternativas de processamento.

A sintaxe mais básica do comando if é:

if (condição) comando

No modelo acima, a condição pode ser qualquer tipo de verificação que utilize operadores lógicos e cujo resultado seja true (verdadeiro) ou false (falso).

No exemplo a seguir, é verificado se o valor da variável nota é maior que 7, e mostra a mensagem aprovado caso seja verdadeiro.

if (nota > 7) cout << "Aprovado";

Então você pode argumentar que sua verificação está incompleta porque não existem verificações para os outros casos possíveis (reprovado, recuperação, abandono, por exemplo.)

Mas antes de implementar todas as verificações possíveis, vamos modificar o exemplo anterior para exibir a mensagem reprovado no caso de a verificação da condição ser falsa.

if (nota > 7)
{
cout << "Aprovado";
}
else
{
cout << "Reprovado";
}

Com a mudança, caso o resultado da primeira verificação (nota > 7) seja falsa, será executado o código do bloco else { cout << "Reprovado" }, que exibe a mensagem de reprovação.

Podemos ainda incluir múltiplas verificações intermediárias entre o primeiro if e o else, utilizando o comando else if (condição). Veja no exemplo:

if (nota >= 9)
{
cout << "Aprovado. Excelente aluno.";
}
else if (nota >=7)
{
cout << "Aprovado. Bom aluno";
}
else if (nota >=5)
{
cout << "Aprovado";
}
else if (nota >= 4)
{
cout << "Recuperação";
}
else
{
cout << "Reprovado";
}

Quando utilizamos o comando else if (condição) é importante observar que somente o código do bloco onde a condição foi avaliada como verdadeira será executado. No exemplo acima, se a nota for 9, apenas o primeiro bloco if será executado exibindo a mensagem "Aprovado. Excelente aluno."

Repare que precisamos iniciar com a verificação mais restritiva. Se o valor for maior ou igual a nove, o código correto será executado. Mas se você inverter a ordem de verificação, começando pela verificação da nota ser maior ou igual a quatro, o bloco de código que exibe a mensagem Recuperação será executado mesmo que a nota seja dez, causando uma inconsistência lógica em sua rotina.

Você observou que utilizamos o operador >= (maior ou igual) nas verificações do exemplo acima, uma vez que estamos verificando se a nota se encontra dentro de um determinado intervalo de valores (ex: >= 9, >=7, >=5, etc.)

Vejamos um novo exemplo, onde um determinado percentual de desconto será aplicado caso o usuário em questão seja empregado, cliente avulso, cliente ouro, cliente prata, cliente internet ou associado.

double desconto = 0.0;
string str;

cout << "Informe o perfil ou digite sair: ";
getline (cin,str);

if (str == "empregado") {
desconto = 10.0;
}
else if (str == "cliente avulso") {
desconto = 5.0;
}
else if (str == "cliente ouro") {
desconto = 15.0;
}
else if (str == "cliente prata") {
desconto = 12.0;
}
else if (str == "cliente internet") {
desconto = 7.0;
}
else if (str == "associado") {
desconto = 20.0;
}
else {
cout << "Valor inválido: " << str << '\n';
}

No exemplo acima, utilizamos o else if para fazer uma série de verificações de igualdade buscando identificar o perfil informado para então obter o respectivo desconto.

Em casos semelhantes, onde são feitas múltiplas verificações de igualdade, podemos utilizar o comando switch ao invés do if, como uma alternativa que envolve menos digitação e otimizações nativas da linguagem nos casos onde há mais do que cinco verificações.

Vejamos o uso do switch para o exemplo anterior.

switch (str) {
case "empregado":
desconto = 10.0;
break;
case "cliente avulso":
desconto = 5.0;
break;
case "cliente ouro":
desconto = 15.0;
break;
case "cliente prata":
desconto = 12.0;
break;
case "cliente internet":
desconto = 7.0;
break;
case "associado":
desconto = 20.0;
break;
default:
cout << "Valor inválido: " << str << '\n';
break;
}

O código ilustrado acima, gera exatamente o mesmo resultado do exemplo anterior.

Observe que o comando switch possui uma sintaxe um pouco mais simples, onde o valor passado como parâmetro será avaliado por todos os "case" definidos. O comando break é obrigatório dentro de cada bloco case, fazendo com que o processamento siga sem avaliar os demais casos.

O comando switch possui o bloco default para o caso onde nenhum dos comandos "case" avaliados atende ao critério definido. Em nosso exemplo, caso o perfil informado não seja um dos perfis verificados, o código do bloco default será executado e apresentada a mensagem informando que o valor inserido é inválido.





Eryx Guimarães

Eryx Guimarães desenvolve e mantém soluções para empreendimentos na web.

Entre em Contato

Contato