Menu
Coddy logo textTech

Aplanar condicionales anidados

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

Al comprobar la elegibilidad para una beca, los condicionales profundamente anidados hacen que el código sea difícil de leer y mantener. En este desafío, transformarás una estructura condicional anidada desordenada en un código limpio y legible mediante cláusulas de guarda.

Una cláusula de guarda es una instrucción de retorno anticipado que gestiona una condición específica de inmediato, lo que permite que el resto de la función se centre en el «camino feliz».

Tu tarea es completar las cláusulas de guarda implementadas parcialmente en el método CheckScholarshipEligibility de acuerdo con estas reglas:

  1. Si la edad es menor que 17, devuelve inmediatamente «No cumple los requisitos debido al requisito de edad»
  2. Si el GPA ≥ 3.5 Y el estudiante tiene una recomendación, concede una beca completa
  3. Si el GPA ≥ 3.8, concede una beca completa (incluso sin recomendación)
  4. Si el GPA ≥ 3.0 Y el estudiante tiene una recomendación, concede una beca parcial
  5. Si el GPA está entre 3.5 y 3.8, concede una beca parcial
  6. Para todos los demás casos, devuelve «No cumple los requisitos para la beca»

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

Practica por tu cuenta: Compilador de C# online