Komplexe boolesche Logik
Teil des Abschnitts Logik & Ablauf der C#-Journey von Coddy. Lektion 9 von 66.
Boolesche Logik kann komplex werden, wenn mehrere Bedingungen kombiniert werden. Wenn du die Operatorrangfolge verstehst und Klammern verwendest, kannst du klare, korrekte Ausdrücke schreiben.
Die Reihenfolge der Priorität boolescher Operatoren in C# lautet:
- NICHT (!)
- UND (&&)
- ODER (||)
Hier ist ein Beispiel für einen komplexen booleschen Ausdruck:
bool isValid = age >= 18 && (score > 70 || hasPriorExperience) && !isBlacklisted;Verwende die Gesetze von De Morgan, um komplexe Negationen zu vereinfachen:
!(A && B)ist dasselbe wie!A || !B!(A || B)ist dasselbe wie!A && !B
Die Negation eines Vergleichs kehrt ihn um: >= wird zu < und > wird zu <=. Diese beiden Bedingungen sind gleichwertig:
// Stattdessen:
if (!(age >= 18 && score > 70))
{
Console.WriteLine("Not eligible");
}
// schreibe die entsprechende Variante:
if (age < 18 || score <= 70)
{
Console.WriteLine("Not eligible");
}Kurzschlussauswertung: Bei && und || wertet C# nur das aus, was nötig ist:
// Wenn user null ist, wertet C# die zweite Bedingung nicht aus
if (user != null && user.IsActive)
{
Console.WriteLine("Active user");
}Verwende zur besseren Verständlichkeit explizite Klammern, auch wenn sie nicht unbedingt erforderlich sind:
bool result = (isWeekend || isHoliday) && (hour > 10 && hour < 20);Aufgabe
MittelErstelle eine Methode namens determineAccess, die anhand der folgenden Regeln bestimmt, ob ein Benutzer Zugriff auf ein System hat:
- Nimmt fünf Parameter entgegen:
- isAdmin (bool): Gibt an, ob der Benutzer Administrator ist
- isLoggedIn (bool): Gibt an, ob der Benutzer derzeit angemeldet ist
- timeOfDay (int): Die aktuelle Stunde (0-23)
- isMaintenanceMode (bool): Gibt an, ob sich das System im Wartungsmodus befindet
- hasEmergencyAccess (bool): Gibt an, ob der Benutzer Notfallzugriff hat
- Gibt true zurück, wenn eine beliebige dieser Bedingungen zutrifft:
- Der Benutzer ist Administrator UND angemeldet
- Die Uhrzeit liegt innerhalb der Geschäftszeiten (9-17 einschließlich) UND der Benutzer ist angemeldet UND das System befindet sich NICHT im Wartungsmodus
- Der Benutzer hat Notfallzugriff
Probier es selbst
public class DetermineAccess
{
// Implementiere die Methode determineAccess
public static bool determineAccess(bool isAdmin, bool isLoggedIn, int timeOfDay, bool isMaintenanceMode, bool hasEmergencyAccess)
{
// Schreibe deinen 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
1Mehrdimensionale Arrays
Grundlagen 2D-Arrays2D-Arrays deklarieren und initialisierenAuf Elemente von 2D-Arrays zugreifenVerschachtelte Schleifen mit 2D-ArraysGezackte ArraysHäufige MatrixoperationenZusammenfassung – Mehrdimensionale Arrays4Techniken zur Ablaufsteuerung
Frühe RückgabenWächterklauselnSprunganweisungen (goto)Break und ContinueVerschachtelte Bedingungen abflachen7Logische Operatoren – Fortgeschritten
KurzschlussauswertungBedingte logische OperatorenOperatorrangfolgeRückblick – Erweiterte Operatoren2Fortgeschrittene Entscheidungslogik
Mehrere BedingungenKomplexe boolesche LogikVergleich: If vs. SwitchVerschachtelte Switch-AnweisungenRückblick – Fortgeschrittene Entscheidungen5Fehlerbehandlung mit Exceptions
Grundlagen von Try-CatchException-TypenMehrere Catch-BlöckeArbeiten mit DateienFinally-BlockUsing im Vergleich zu Try-FinallyBenutzerdefinierte ExceptionsZusammenfassung – Fehlerbehandlung3Schleifenverbesserungen
SchleifenleistungKomplexe IterationJeder SchleifentypSchleifen refaktorierenRückblick – Optimierte Schleifen6Behandlung von Nullwerten
Grundlagen von NullreferenzenNullable WerttypenMuster zur NullprüfungDefensive ProgrammierungZusammenfassung – NullsicherheitÜbe selbstständig: Online-C#-Compiler