Menu
Coddy logo textTech

Aplatir les conditionnelles imbriquées

Fait partie de la section Logique & Flux du Journey C# de Coddy — leçon 22 sur 66.

Les conditionnels imbriqués peuvent rendre votre code difficile à lire et à maintenir. L'aplatissement aide à améliorer la lisibilité en réduisant les niveaux d'indentation.

Voici un exemple de conditionnels profondément imbriqués :

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

Nous pouvons aplatir cela en utilisant des retours anticipés ou des clauses de garde :

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

Remarquez comment le code aplati présente moins d'indentation et est plus facile à suivre.

challenge icon

Défi

Facile

Dans la vérification de l'éligibilité aux bourses, des conditionnels profondément imbriqués rendent le code difficile à lire et à maintenir. Dans ce défi, vous transformerez une structure conditionnelle imbriquée désordonnée en un code propre et lisible en utilisant des clauses de garde.

Une clause de garde est une instruction de retour anticipé qui gère une condition spécifique immédiatement, permettant au reste de la fonction de se concentrer sur le « chemin heureux ».

Votre tâche est de compléter les clauses de garde partiellement implémentées dans la méthode CheckScholarshipEligibility selon ces règles :

  1. Si l'âge est inférieur à 17, retournez immédiatement "Not eligible due to age requirement"
  2. Si GPA ≥ 3.5 ET que l'étudiant a une recommandation, accordez une bourse complète
  3. Si GPA ≥ 3.8, accordez une bourse complète (même sans recommandation)
  4. Si GPA ≥ 3.0 ET que l'étudiant a une recommandation, accordez une bourse partielle
  5. Si GPA est entre 3.5 et 3.8, accordez une bourse partielle
  6. Pour tous les autres cas, retournez "Not eligible for scholarship"

Aide-mémoire

Les conditionnels imbriqués peuvent rendre le code difficile à lire et à maintenir. L'aplatissement aide à améliorer la lisibilité en réduisant les niveaux d'indentation.

Au lieu de conditionnels profondément imbriqués :

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

Utilisez des retours précoces ou des clauses de garde pour aplatir la structure :

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

Une clause de garde est une instruction de retour précoce qui gère une condition spécifique immédiatement, permettant au reste de la fonction de se concentrer sur le "happy path".

Essayez vous-même

using System;

class Program
{
    public static void CheckScholarshipEligibility(int age, double gpa, bool hasRecommendation)
    {
        // Clause de garde pour l'exigence d'âge
        if (age < 17)
        {
            Console.WriteLine("Not eligible due to age requirement.");
            return;
        }
        
        // Clause de garde pour bourse complète avec recommandation
        if (/* Compléter cette condition */)
        {
            Console.WriteLine("Full scholarship granted!");
            return;
        }
        
        // Clause de garde pour bourse complète avec GPA exceptionnel
        if (/* Compléter cette condition */)
        {
            Console.WriteLine("Full scholarship granted!");
            return;
        }
        
        // Clause de garde pour bourse partielle avec recommandation
        if (/* Compléter cette condition */)
        {
            Console.WriteLine("Partial scholarship granted.");
            return;
        }
        
        // Clause de garde pour bourse partielle avec bon GPA
        if (/* Compléter cette condition */)
        {
            Console.WriteLine("Partial scholarship granted.");
            return;
        }
        
        // Cas par défaut : non éligible
        Console.WriteLine("Not eligible for scholarship.");
    }
    
    static void Main(string[] args)
    {
        // Cas de test pour un retour immédiat
        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 iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Logique & Flux