Logische Operatoren Teil 3
Teil des Abschnitts Fundamentals der Rust-Journey von Coddy — Lektion 23 von 75.
Beim Prüfen mehrerer Bedingungen hört der Computer mit der Prüfung auf, sobald er das Endergebnis kennt (dies wird als Kurzschlussauswertung bezeichnet).
Zum Beispiel:
let x: i32 = 0;
let y: i32 = 5;
let result: bool = x != 0 && y / x > 2;Hier ist x gleich 0, daher wird y / x > 2 nicht ausgewertet. Wenn wir die Reihenfolge umkehren würden:
let result: bool = y / x > 2 && x != 0;Dies wird zu einem Fehler führen, da y durch 0 geteilt wird, was in der Mathematik unzulässig ist.
Diese Technik wird verwendet, um die Auswertung logischer Ausdrücke zu optimieren. Zum Beispiel:
let a: i32 = 0;
let b: i32 = 2;
let c: i32 = 3;
let d: i32 = 5;
let result: bool = (a > 0 && b < 2) || (c < -5 && d < 10);In diesem Beispiel werden b < 2 und d < 10 nicht ausgewertet, da a > 0 und c < -5 beide falsch sind.
Aufgabe
AnfängerLassen Sie uns ein Programm erstellen, um zu entscheiden, ob es ein guter Tag für die Energieerzeugung durch Solarmodule ist
Initialisieren Sie diese Variablen:
is_sunnymit dem Wert truewind_speedmit dem Wert 5.4temperaturemit dem Wert 23solar_panel_outputmit dem Wert 9is_cloudymit dem Wert false
Erstellen Sie einen logischen Ausdruck, der ALLE diese Bedingungen prüft:
- Es ist sonnig
- Die Windgeschwindigkeit ist geringer als 10
- Die Leistung der Solarmodule ist geringer als 15
- Die Temperatur liegt über 20 ODER es gibt keine Wolken
Spickzettel
Rust verwendet Kurzschlussauswertung (Short-Circuit Evaluation) beim Prüfen mehrerer Bedingungen – die Auswertung stoppt, sobald das Endergebnis feststeht.
Bei && (UND) wird die zweite Bedingung nicht ausgewertet, wenn die erste falsch ist:
let x: i32 = 0;
let y: i32 = 5;
let result: bool = x != 0 && y / x > 2; // Sicher - y/x wird nicht ausgewertetBei || (ODER) wird die zweite Bedingung nicht ausgewertet, wenn die erste wahr ist:
let a: i32 = 0;
let b: i32 = 2;
let c: i32 = 3;
let d: i32 = 5;
let result: bool = (a > 0 && b < 2) || (c < -5 && d < 10);
// b < 2 und d < 10 werden nicht ausgewertetDiese Optimierung verhindert unnötige Berechnungen und kann Laufzeitfehler wie eine Division durch Null vermeiden.
Probier es selbst
fn main() {
// Variablen initialisieren
// Der vollständige logische Ausdruck
let result: bool =
// Die folgenden Zeilen nicht löschen
println!("Checking conditions for solar energy production...");
println!("1. Is it sunny? {}", is_sunny);
println!("2. Is wind speed safe? {}", (wind_speed < 10.0));
println!("3. Can panels produce more? {}", (solar_panel_output < 15));
println!("4. Is temperature good OR no clouds? {}", (temperature > 20 || !is_cloudy));
println!("\\nFinal result - Good day for solar energy production: {}", result);
}Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Fundamentals
4Operatoren Teil 1
Arithmetische OperatorenModulo-OperatorArithmetische AbkürzungenVergleichsoperatorenString-Vergleich7Grundlagen IO
Ausgabe in die KonsoleBenutzereingaben lesenWiederholung - Bis 120Wiederholung - Wahr oder Falsch5Operatoren Teil 2
Logische Operatoren Teil 1Logische Operatoren Teil 2Wiederholung - Einfache LogikLogische Operatoren Teil 311Funktionen
Funktionen deklarierenParameter und ArgumenteRückgabewerteMehrere RückgabewerteWiederholung - Sigma-FunktionWiederholung - Validierungsfunktion14Iterieren über Arrays
Range-LeitfadenErweiterte For-SchleifeBorrowing in SchleifenGängige Array-Operationen3Variablen Teil 2
TypdeklarationNamenskonventionenTypinferenzRückblick - Variablen initialisierenTypumwandlung6Entscheidungsfindung
If-AusdrückeIf-ElseMatch-AnweisungZusammenfassung - If-ElseVerschachteltes If-Else9Schleifen
For-Schleife über SerienWhile-SchleifeBreakContinueVerschachtelte SchleifenSchleifen-LabelsEndlosschleifeRückblick – Dynamische Eingabe