Menu
Coddy logo textTech

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.

challenge icon

Aufgabe

Anfänger

Lassen 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_sunny mit dem Wert true
  • wind_speed mit dem Wert 5.4
  • temperature mit dem Wert 23
  • solar_panel_output mit dem Wert 9
  • is_cloudy mit 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 ausgewertet

Bei || (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 ausgewertet

Diese 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);
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Fundamentals