CodeGym /Cursos /C# SELF /If aninhado, lógica multinível

If aninhado, lógica multinível

C# SELF
Nível 3 , Lição 2
Disponível

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
    }
}
if aninhado dentro de outro if

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.

Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION