Flatten Nested Conditionals
Teil des Abschnitts Logik & Ablauf der C#-Journey von Coddy — Lektion 22 von 66.
Verschachtelte Bedingungen können Ihren Code schwer lesbar und wartbar machen. Das Flachmachen verbessert die Lesbarkeit, indem die Einrückungsebenen reduziert werden.
Hier ist ein Beispiel für tief verschachtelte Bedingungen:
if (userLoggedIn)
{
if (userHasPermission)
{
if (fileExists)
{
// Die Datei verarbeiten
ProcessFile();
}
else
{
Console.WriteLine("File not found");
}
}
else
{
Console.WriteLine("No permission");
}
}
else
{
Console.WriteLine("Not logged in");
}
Wir können das mit early returns oder Guard Clauses abflachen:
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();
Beachten Sie, wie der abgeflachte Code weniger Einrückungen hat und leichter zu folgen ist.
Aufgabe
EinfachBeim Überprüfen der Stipendienberechtigung machen tief verschachtelte Bedingungen den Code schwer lesbar und wartbar. In dieser Herausforderung verwandelst du eine unordentliche verschachtelte Bedingungsstruktur in sauberen, lesbaren Code unter Verwendung von Guard-Klauseln.
Eine Guard-Klausel ist eine frühe Rückgabeanweisung, die eine spezifische Bedingung sofort behandelt und den Rest der Funktion auf den „happy path“ konzentrieren lässt.
Deine Aufgabe besteht darin, die teilweise implementierten Guard-Klauseln in der CheckScholarshipEligibility-Methode gemäß diesen Regeln zu vervollständigen:
- Wenn das Alter kleiner als 17 ist, gib sofort „Not eligible due to age requirement“ zurück
- Wenn GPA ≥ 3.5 UND der Student eine Empfehlung hat, verleihe Vollstipendium
- Wenn GPA ≥ 3.8, verleihe Vollstipendium (auch ohne Empfehlung)
- Wenn GPA ≥ 3.0 UND der Student eine Empfehlung hat, verleihe Teilstipendium
- Wenn GPA zwischen 3.5 und 3.8 liegt, verleihe Teilstipendium
- Für alle anderen Fälle gib „Not eligible for scholarship“ zurück
Spickzettel
Verschachtelte Bedingungen können den Code schwer lesbar und wartbar machen. Das Abfalten verbessert die Lesbarkeit, indem die Einrückungsebenen reduziert werden.
Anstatt tief verschachtelter Bedingungen:
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");
}
Verwenden Sie frühe Returns oder Guard-Klauseln, um die Struktur abzuflachen:
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();
Eine Guard-Klausel ist eine frühe Return-Anweisung, die eine spezifische Bedingung sofort behandelt und es dem Rest der Funktion ermöglicht, sich auf den „Happy Path“ zu konzentrieren.
Probier es selbst
using System;
class Program
{
public static void CheckScholarshipEligibility(int age, double gpa, bool hasRecommendation)
{
// Schutzklausel für Altersanforderung
if (age < 17)
{
Console.WriteLine("Not eligible due to age requirement.");
return;
}
// Schutzklausel für Vollstipendium mit Empfehlung
if (/* Vervollständige diese Bedingung */)
{
Console.WriteLine("Full scholarship granted!");
return;
}
// Schutzklausel für Vollstipendium mit außergewöhnlichem GPA
if (/* Vervollständige diese Bedingung */)
{
Console.WriteLine("Full scholarship granted!");
return;
}
// Schutzklausel für Teilstipendium mit Empfehlung
if (/* Vervollständige diese Bedingung */)
{
Console.WriteLine("Partial scholarship granted.");
return;
}
// Schutzklausel für Teilstipendium mit gutem GPA
if (/* Vervollständige diese Bedingung */)
{
Console.WriteLine("Partial scholarship granted.");
return;
}
// Standardfall: nicht berechtigt
Console.WriteLine("Not eligible for scholarship.");
}
static void Main(string[] args)
{
// Testfälle für sofortiges Feedback
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);
}
}Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logik & Ablauf
1Multi-dimensional Arrays
2D Arrays BasicsDeclaring and Initializing 2DAccessing 2D Array ElementsNested Loops with 2D ArraysJagged ArraysCommon Matrix OperationsRecap - Multi-dimensional4Flow Control Techniques
Early ReturnsGuard ClausesJump Statements (goto)Break and ContinueFlatten Nested Conditionals7Logical Operators Advanced
Short-Circuit EvaluationConditional Logical OperatorsOperator PrecedenceRecap - Advanced Operators2Advanced Decision Making
Multiple ConditionsComplex Boolean LogicIf vs. Switch ComparisonNested Switch StatementsRecap - Advanced Decisions5Exception Handling
Try-Catch BasicsException TypesMultiple Catch BlocksWorking with FilesFinally BlockUsing vs. Try-FinallyCustom ExceptionsRecap - Error Handling3Loop Enhancements
Loop PerformanceIterating ComplexEach Loop TypeRefactoring LoopsRecap - Optimized Loops6Null Handling
Null Reference BasicsNullable Value TypesNull Checking PatternsDefensive ProgrammingRecap - Null Safety