1. Sintaxe básica do if aninhado
Na vida real, é raro tomar decisão só por um critério. Normalmente, você precisa checar várias condições ao mesmo tempo, e elas geralmente dependem umas das outras. Por exemplo, pra entrar num show, não basta só ser adulto — às vezes ainda tem que estar na lista de convidados. É aí que entra a tal da lógica multinível, e quem salva a gente são os operadores if aninhados.
Condição aninhada é quando um if vive dentro de outro. Imagina uma caixa dentro de outra caixa: se a primeira caixa abriu (condição passou), aí você olha o que tem dentro e, talvez, abre a segunda. No código e na lógica, isso é uma ferramenta bem poderosa.
Vamos começar do básico:
if (condiçãoA)
{
// ações se condiçãoA for true (verdadeiro)
if (condiçãoB)
{
// ações se as duas condições forem verdadeiras
}
}
Se isso te lembra uma matrioska — você entendeu certinho! O if interno só vai rodar se o externo passar.
Exemplo: entrada no clube
Bora evoluir nosso app de exemplo, onde o usuário já digitava nome e idade. Agora vamos colocar um segundo nível de checagem: pra entrar num clube fechado, tem que ter mais de 21 anos e ter um código de convite.
Console.Write("Digite seu nome: ");
string name = Console.ReadLine();
Console.Write("Digite sua idade: ");
int age = int.Parse(Console.ReadLine());
if (age >= 21)
{
Console.Write("Digite o código de convite: ");
string code = Console.ReadLine();
if (code == "VIP2024")
{
Console.WriteLine("Bem-vindo, " + name + ", ao clube VIP!");
}
else
{
Console.WriteLine("Foi mal, código errado. Acesso negado.");
}
}
else
{
Console.WriteLine("Foi mal, só entra a partir dos 21 anos!");
}
Repara: o if interno só checa o código se a idade já passou no teste. Isso economiza recurso (e não estressa o segurança).
2. Quantos níveis de aninhamento dá pra usar?
Tecnicamente, quantos você quiser. Mas na real — quanto mais níveis, mais difícil de ler e manter o código. Na prática, quase nunca passa de 2-3 níveis. Se começar a virar uma escada com 4 ou mais if aninhados, pensa bem: talvez dá pra simplificar a lógica ou jogar parte da checagem pra funções separadas (mas isso é papo pra outra aula!).
3. If aninhado e else: pegadinhas e detalhes
Erro de iniciante: relaxar nas chaves.
Quando você escreve condições aninhadas, principalmente usando else, o C# segue as regras de sintaxe à risca. Se não colocar as chaves {}, só a primeira linha depois do if ou else vai ser considerada. Isso gera uns bugs chatos.
Exemplo com erro potencial:
if (age >= 21)
if (code == "VIP2024")
Console.WriteLine("Bem-vindo!");
else
Console.WriteLine("Código errado.");
Muita gente acha que o else tá ligado à checagem da idade, mas na real ele tá ligado ao if mais próximo (o do código de convite). Por isso as mensagens podem sair erradas. Sempre use chaves — mesmo se só tiver uma linha dentro!
Pra não ficar dúvida, olha só. O compilador entende o código acima assim:
if (age >= 21)
{
if (code == "VIP2024")
Console.WriteLine("Bem-vindo!");
else
Console.WriteLine("Código errado.");
}
Importante! De novo:
Se na estrutura if-else não tiver chaves, o else vai pro if anterior (o mais perto dele).
4. Alternativas: else if em condições aninhadas
Às vezes, dentro do if externo, você quer não só checar uma condição extra, mas também prever uma alternativa. Por exemplo, se o código de convite não rolou, pode oferecer pra comprar ingresso. Isso rola com else if/else aninhado:
if (age >= 21)
{
Console.Write("Digite o código de convite: ");
string code = Console.ReadLine();
if (code == "VIP2024")
{
Console.WriteLine("Bem-vindo ao clube!");
}
else if (code == "GUEST")
{
Console.WriteLine("Modo convidado: acesso só até 23:00.");
}
else
{
Console.WriteLine("Infelizmente, não rola acesso.");
}
}
else
{
Console.WriteLine("Só entra a partir dos 21 anos.");
}
Nesse exemplo, a gente fez uma escolha aninhada entre três cenários: código VIP, código de convidado e recusa.
5. Prática: calculadora de desconto com lógica multinível
Bora fazer um app assim: o usuário ganha desconto na loja baseado na idade e se tem cartão do clube.
- Se a idade do usuário for maior ou igual a 60 — desconto de 15%.
- Se a idade for menor, mas o usuário tem cartão do clube — desconto de 7%.
- Nos outros casos, não tem desconto.
Como fica isso no código?
Console.Write("Digite sua idade: ");
int age = int.Parse(Console.ReadLine());
double discount = 0.0;
if (age >= 60)
{
discount = 0.15;
}
else
{
Console.Write("Você tem cartão do clube (sim/não)? ");
string hasCard = Console.ReadLine();
if (hasCard == "sim")
{
discount = 0.07;
}
}
Console.WriteLine("Seu desconto: " + (discount * 100) + "%");
Aqui a gente usou um if aninhado dentro do else. Se a idade não passou, só aí pergunta do cartão.
GO TO FULL VERSION