Menu
Coddy logo textTech

Flatten Nested Conditionals

Parte da seção Lógica & Fluxo do Journey de C# da Coddy — lição 22 de 66.

Condicionais aninhadas podem tornar seu código difícil de ler e manter. Achatar ajuda a melhorar a legibilidade reduzindo os níveis de indentação.

Aqui está um exemplo de condicionais profundamente aninhadas:

if (userLoggedIn)
{
    if (userHasPermission)
    {
        if (fileExists)
        {
            // Process the file
            ProcessFile();
        }
        else
        {
            Console.WriteLine("File not found");
        }
    }
    else
    {
        Console.WriteLine("No permission");
    }
}
else
{
    Console.WriteLine("Not logged in");
}

Podemos achatar isso usando retornos antecipados ou cláusulas de guarda:

if (!userLoggedIn)
{
    Console.WriteLine("Not logged in");
    return;
}

if (!userHasPermission)
{
    Console.WriteLine("No permission");
    return;
}

if (!fileExists)
{
    Console.WriteLine("File not found");
    return;
}

// Process the file
ProcessFile();

Observe como o código achatado tem menos indentação e é mais fácil de seguir.

challenge icon

Desafio

Fácil

Na verificação de elegibilidade para bolsas de estudo, condicionais profundamente aninhadas tornam o código difícil de ler e manter. Neste desafio, você transformará uma estrutura condicional aninhada bagunçada em código limpo e legível usando cláusulas de guarda.

Uma cláusula de guarda é uma instrução de retorno antecipado que lida com uma condição específica imediatamente, permitindo que o restante da função se concentre no "caminho feliz".

Sua tarefa é completar as cláusulas de guarda parcialmente implementadas no método CheckScholarshipEligibility de acordo com estas regras:

  1. Se a idade for menor que 17, retorne "Not eligible due to age requirement" imediatamente
  2. Se GPA ≥ 3.5 E o estudante tiver uma recomendação, conceda bolsa completa
  3. Se GPA ≥ 3.8, conceda bolsa completa (mesmo sem recomendação)
  4. Se GPA ≥ 3.0 E o estudante tiver uma recomendação, conceda bolsa parcial
  5. Se GPA estiver entre 3.5 e 3.8, conceda bolsa parcial
  6. Para todos os outros casos, retorne "Not eligible for scholarship"

Folha de consulta

Condicionais aninhadas podem tornar o código difícil de ler e manter. Achatar ajuda a melhorar a legibilidade ao reduzir os níveis de indentação.

Em vez de condicionais profundamente aninhadas:

if (userLoggedIn)
{
    if (userHasPermission)
    {
        if (fileExists)
        {
            // Process the file
            ProcessFile();
        }
        else
        {
            Console.WriteLine("File not found");
        }
    }
    else
    {
        Console.WriteLine("No permission");
    }
}
else
{
    Console.WriteLine("Not logged in");
}

Use retornos antecipados ou cláusulas de guarda para achatar a estrutura:

if (!userLoggedIn)
{
    Console.WriteLine("Not logged in");
    return;
}

if (!userHasPermission)
{
    Console.WriteLine("No permission");
    return;
}

if (!fileExists)
{
    Console.WriteLine("File not found");
    return;
}

// Process the file
ProcessFile();

Uma cláusula de guarda é uma instrução de retorno antecipado que lida com uma condição específica imediatamente, permitindo que o restante da função se concentre no "caminho feliz".

Experimente você mesmo

using System;

class Program
{
    public static void CheckScholarshipEligibility(int age, double gpa, bool hasRecommendation)
    {
        // Cláusula de guarda para requisito de idade
        if (age < 17)
        {
            Console.WriteLine("Not eligible due to age requirement.");
            return;
        }
        
        // Cláusula de guarda para bolsa integral com recomendação
        if (/* Complete esta condição */)
        {
            Console.WriteLine("Full scholarship granted!");
            return;
        }
        
        // Cláusula de guarda para bolsa integral com GPA excepcional
        if (/* Complete esta condição */)
        {
            Console.WriteLine("Full scholarship granted!");
            return;
        }
        
        // Cláusula de guarda para bolsa parcial com recomendação
        if (/* Complete esta condição */)
        {
            Console.WriteLine("Partial scholarship granted.");
            return;
        }
        
        // Cláusula de guarda para bolsa parcial com bom GPA
        if (/* Complete esta condição */)
        {
            Console.WriteLine("Partial scholarship granted.");
            return;
        }
        
        // Caso padrão: não elegível
        Console.WriteLine("Not eligible for scholarship.");
    }
    
    static void Main(string[] args)
    {
        // Casos de teste para feedback imediato
        Console.WriteLine("Test Case 1: Age 16, GPA 4.0, Has Recommendation: True");
        CheckScholarshipEligibility(16, 4.0, true);
        
        Console.WriteLine("\nTest Case 2: Age 18, GPA 3.9, Has Recommendation: False");
        CheckScholarshipEligibility(18, 3.9, false);
        
        Console.WriteLine("\nTest Case 3: Age 17, GPA 3.6, Has Recommendation: True");
        CheckScholarshipEligibility(17, 3.6, true);
        
        Console.WriteLine("\nTest Case 4: Age 19, GPA 3.2, Has Recommendation: True");
        CheckScholarshipEligibility(19, 3.2, true);
        
        Console.WriteLine("\nTest Case 5: Age 18, GPA 2.8, Has Recommendation: False");
        CheckScholarshipEligibility(18, 2.8, false);
    }
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Lógica & Fluxo