Menu
Coddy logo textTech

Flatten Nested Conditionals

Parte de la sección Lógica y Flujo del Journey de C# de Coddy — lección 22 de 66.

Las condicionales anidadas pueden hacer que tu código sea difícil de leer y mantener. Aplanarlas ayuda a mejorar la legibilidad al reducir los niveles de indentación.

Aquí hay un ejemplo de condicionales profundamente anidados:

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

Podemos aplanar esto usando retornos tempranos o cláusulas de guardia:

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();

Observa cómo el código aplanado tiene menos sangría y es más fácil de seguir.

challenge icon

Desafío

Fácil

En la verificación de elegibilidad para becas, las condicionales profundamente anidadas hacen que el código sea difícil de leer y mantener. En este desafío, transformarás una estructura condicional anidada desordenada en código limpio y legible usando cláusulas de guardia.

Una cláusula de guardia es una instrucción de retorno temprano que maneja una condición específica de inmediato, permitiendo que el resto de la función se enfoque en la ruta feliz.

Tu tarea es completar las cláusulas de guardia parcialmente implementadas en el método CheckScholarshipEligibility según estas reglas:

  1. Si la edad es menor que 17, devuelve "Not eligible due to age requirement" inmediatamente
  2. Si GPA ≥ 3.5 Y el estudiante tiene una recomendación, concede beca completa
  3. Si GPA ≥ 3.8, concede beca completa (incluso sin recomendación)
  4. Si GPA ≥ 3.0 Y el estudiante tiene una recomendación, concede beca parcial
  5. Si GPA está entre 3.5 y 3.8, concede beca parcial
  6. Para todos los demás casos, devuelve "Not eligible for scholarship"

Hoja de referencia

Las condicionales anidadas pueden hacer que el código sea difícil de leer y mantener. Aplanarlas ayuda a mejorar la legibilidad reduciendo los niveles de indentación.

En lugar de condicionales profundamente anidadas:

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");
}

Usa retornos tempranos o cláusulas de guardia para aplanar la estructura:

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();

Una cláusula de guardia es una instrucción de retorno temprano que maneja una condición específica de inmediato, permitiendo que el resto de la función se enfoque en la "ruta feliz".

Pruébalo tú mismo

using System;

class Program
{
    public static void CheckScholarshipEligibility(int age, double gpa, bool hasRecommendation)
    {
        // Cláusula de guardia para el requisito de edad
        if (age < 17)
        {
            Console.WriteLine("Not eligible due to age requirement.");
            return;
        }
        
        // Cláusula de guardia para beca completa con recomendación
        if (/* Completa esta condición */)
        {
            Console.WriteLine("Full scholarship granted!");
            return;
        }
        
        // Cláusula de guardia para beca completa con GPA excepcional
        if (/* Completa esta condición */)
        {
            Console.WriteLine("Full scholarship granted!");
            return;
        }
        
        // Cláusula de guardia para beca parcial con recomendación
        if (/* Completa esta condición */)
        {
            Console.WriteLine("Partial scholarship granted.");
            return;
        }
        
        // Cláusula de guardia para beca parcial con buen GPA
        if (/* Completa esta condición */)
        {
            Console.WriteLine("Partial scholarship granted.");
            return;
        }
        
        // Caso predeterminado: no elegible
        Console.WriteLine("Not eligible for scholarship.");
    }
    
    static void Main(string[] args)
    {
        // Casos de prueba para retroalimentación inmediata
        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 iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Lógica y Flujo