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.
Défi
FacileLors de la vérification de l’admissibilité à une bourse, les conditionnelles profondément imbriquées rendent le code difficile à lire et à maintenir. Dans ce défi, vous allez transformer une structure conditionnelle imbriquée désordonnée en un code clair et lisible à l’aide de clauses de garde.
Une clause de garde est une instruction de retour anticipé qui traite immédiatement une condition spécifique, permettant au reste de la fonction de se concentrer sur le « chemin nominal ».
Votre tâche consiste à compléter les clauses de garde partiellement implémentées dans la méthode CheckScholarshipEligibility conformément aux règles suivantes :
- Si l’âge est inférieur à 17 ans, retourner immédiatement "Not eligible due to age requirement"
- Si le GPA ≥ 3.5 ET que l’étudiant a une recommandation, accorder une bourse complète
- Si le GPA ≥ 3.8, accorder une bourse complète (même sans recommandation)
- Si le GPA ≥ 3.0 ET que l’étudiant a une recommandation, accorder une bourse partielle
- Si le GPA est compris entre 3.5 et 3.8, accorder une bourse partielle
- Dans tous les autres cas, retourner "Not eligible for scholarship"
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);
}
}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
1Tableaux multidimensionnels
Bases des tableaux 2DDéclaration et initialisation en 2DAccès aux éléments d'un tableau 2DBoucles imbriquées et tableaux 2DTableaux irréguliersOpérations matricielles courantesRécapitulatif - Multidimensionnel4Techniques de contrôle de flux
Retours anticipésClauses de gardeInstructions de saut (goto)Break et ContinueAplatir les conditionnelles imbriquées2Prise de décision avancée
Conditions multiplesLogique booléenne complexeComparaison If vs SwitchInstructions Switch imbriquéesRécapitulatif - Décisions avancées5Gestion des exceptions
Bases du Try-CatchTypes d'exceptionsBlocs Catch multiplesManipulation de fichiersLe bloc FinallyUsing vs Try-FinallyExceptions personnaliséesRécapitulatif - Gestion des erreurs3Améliorations des boucles
Performance des bouclesItération de structures complexesChaque type de boucleRefactorisation des bouclesRécapitulatif - Boucles optimisées6Gestion des valeurs nulles
Les bases des références nullesTypes valeur nullablesPatterns de vérification de nullitéProgrammation défensiveRécapitulatif - Null SafetyEntraînez-vous par vous-même : Compilateur C# en ligne