Complex Boolean Logic
Teil des Abschnitts Logik & Ablauf der C#-Journey von Coddy — Lektion 9 von 66.
Boolesche Logik kann komplex werden, wenn mehrere Bedingungen kombiniert werden. Das Verständnis der Operatorpriorität und die Verwendung von Klammern hilft, klare und korrekte Ausdrücke zu schreiben.
Die Reihenfolge der Präzedenz für boolesche Operatoren in C# ist:
- NICHT (!)
- UND (&&)
- ODER (||)
Hier ist ein Beispiel für einen komplexen booleschen Ausdruck:
bool isValid = age >= 18 && (score > 70 || hasPriorExperience) && !isBlacklisted;Verwenden Sie die De-Morganschen Gesetze, um komplexe Negationen zu vereinfachen:
// Anstatt von:
if (!(age >= 18 && score > 70))
{
// Dies ist äquivalent zu:
if (age < 18 || score <= 70)
{
Console.WriteLine("Not eligible");
}
}Kurzschlussevaluierung: Mit && und || wertet C# nur aus, was notwendig ist:
// Wenn user null ist, wertet C# die zweite Bedingung nicht aus
if (user != null && user.IsActive)
{
Console.WriteLine("Active user");
}Verwenden Sie explizite Klammern für Klarheit, auch wenn sie nicht strikt erforderlich sind:
bool result = (isWeekend || isHoliday) && (hour > 10 && hour < 20);Aufgabe
MittelErstellen Sie eine Methode namens determineAccess, die bestimmt, ob ein Benutzer Zugriff auf ein System hat, basierend auf diesen Regeln:
- Nehmen Sie fünf Parameter:
- isAdmin (bool): Ob der Benutzer ein Administrator ist
- isLoggedIn (bool): Ob der Benutzer derzeit angemeldet ist
- timeOfDay (int): Die aktuelle Stunde (0-23)
- isMaintenanceMode (bool): Ob das System im Wartungsmodus ist
- hasEmergencyAccess (bool): Ob der Benutzer Notfallzugriff hat
- Gibt true zurück, wenn IRGENDWELCHE dieser Bedingungen zutreffen:
- Der Benutzer ist Admin UND ist angemeldet
- Die Zeit liegt zwischen Geschäftszeiten (9-17 inklusive) UND der Benutzer ist angemeldet UND das System ist NICHT im Wartungsmodus
- Der Benutzer hat Notfallzugriff
Spickzettel
Operatorpräzedenz in C# (von höchster zu niedrigster):
- NICHT (!)
- UND (&&)
- ODER (||)
Komplexe boolesche Ausdrücke:
bool isValid = age >= 18 && (score > 70 || hasPriorExperience) && !isBlacklisted;De-Morgansche Gesetze zur Vereinfachung von Negationen:
// Instead of:
if (!(age >= 18 && score > 70))
{
// This is equivalent to:
if (age < 18 || score <= 70)
{
Console.WriteLine("Not eligible");
}
}Kurzschlussevaluierung verhindert Fehler, indem nur das Notwendige ausgewertet wird:
// If user is null, C# won't evaluate the second condition
if (user != null && user.IsActive)
{
Console.WriteLine("Active user");
}Verwenden Sie explizite Klammern für Klarheit:
bool result = (isWeekend || isHoliday) && (hour > 10 && hour < 20);Probier es selbst
public class DetermineAccess
{
// Implementieren Sie die determineAccess-Methode
public static bool determineAccess(bool isAdmin, bool isLoggedIn, int timeOfDay, bool isMaintenanceMode, bool hasEmergencyAccess)
{
// Schreiben Sie Ihren Code hier
}
}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