Menu
Coddy logo textTech

'match' mit 'Result' verwenden

Teil des Abschnitts Logic & Flow der Rust-Journey von Coddy — Lektion 43 von 66.

Nachdem Sie nun verstehen, was ein Result ist, lernen wir nun die expliziteste und leistungsfähigste Methode kennen, um sowohl Erfolgs- als auch Fehlerfälle zu behandeln: die Verwendung eines match-Ausdrucks.

Genau wie bei Option zwingt dich match dazu, beide Varianten eines Result zu behandeln. Du erstellst einen Zweig für Ok, um den Erfolg zu behandeln, und einen weiteren Zweig für Err, um den Fehler zu behandeln:

let result = divide(10, 2);

match result {
    Ok(value) => println!("Division successful: {}", value),
    Err(error) => println!("Division failed: {}", error),
}

Wenn das Result Ok ist, extrahiert das match den erfolgreichen Wert und führt den ersten Zweig aus. Wenn es Err ist, extrahiert es die Fehlerinformationen und führt den zweiten Zweig aus. Dieses Muster stellt sicher, dass Sie niemals versehentlich einen potenziellen Fehler ignorieren.

challenge icon

Aufgabe

Einfach

Sie erhalten zwei Eingaben. Die erste Eingabe ist eine Zahl (als String) und die zweite Eingabe ist eine weitere Zahl (als String). Erstellen Sie eine Funktion, die versucht, die erste Zahl durch die zweite Zahl zu dividieren und ein Result<f64, &'static str> zurückgibt. Wenn die zweite Zahl Null ist, geben Sie ein Err mit der Nachricht "Division by zero" zurück. Andernfalls geben Sie Ok mit dem Divisionsergebnis zurück. Verwenden Sie einen match-Ausdruck, um sowohl den Ok- als auch den Err-Fall zu behandeln und die entsprechende Nachricht auszugeben.

Anforderungen:

  • Lesen Sie die erste Eingabe (Dividend) ein und entfernen Sie Leerzeichen
  • Parsen Sie die erste Eingabe zu f64
  • Lesen Sie die zweite Eingabe (Divisor) ein und entfernen Sie Leerzeichen
  • Parsen Sie die zweite Eingabe zu f64
  • Erstellen Sie eine Funktion, die zwei f64-Parameter entgegennimmt und Result<f64, &'static str> zurückgibt
  • Prüfen Sie innerhalb der Funktion, ob der Divisor 0.0 ist:
    • Wenn ja, geben Sie Err("Division by zero") zurück
    • Wenn nein, geben Sie Ok(dividend / divisor) zurück
  • Rufen Sie die Funktion mit den beiden geparsten Zahlen auf
  • Verwenden Sie einen match-Ausdruck, um das Result zu behandeln
  • Im Ok(value)-Zweig geben Sie Folgendes aus: Result: [value]
  • Im Err(error)-Zweig geben Sie Folgendes aus: Error: [error]

Eingabe:

  • Erste Zeile: Eine Zahl, die den Dividenden darstellt (z. B. 10.0)
  • Zweite Zeile: Eine Zahl, die den Divisor darstellt (z. B. 2.0)

Ausgabe:

  • Wenn die Division erfolgreich ist: Result: [result]
  • Bei Division durch Null: Error: Division by zero

Spickzettel

Verwenden Sie match, um sowohl die Ok- als auch die Err-Varianten eines Result zu behandeln:

let result = divide(10, 2);

match result {
    Ok(value) => println!("Division successful: {}", value),
    Err(error) => println!("Division failed: {}", error),
}

Der match-Ausdruck zwingt Sie dazu, sowohl Erfolgs- als auch Fehlerfälle zu behandeln. Wenn das Result Ok ist, extrahiert es den erfolgreichen Wert und führt den ersten Zweig aus. Wenn es Err ist, extrahiert es die Fehlerinformationen und führt den zweiten Zweig aus.

Probier es selbst

use std::io;

// TODO: Erstellen Sie hier Ihre Divisionsfunktion, die Result<f64, &'static str> zurückgibt


fn main() {
    // Erste Eingabe lesen (Dividend)
    let mut dividend_input = String::new();
    io::stdin().read_line(&mut dividend_input).expect("Failed to read line");
    let dividend: f64 = dividend_input.trim().parse().expect("Invalid number");
    
    // Zweite Eingabe lesen (Divisor)
    let mut divisor_input = String::new();
    io::stdin().read_line(&mut divisor_input).expect("Failed to read line");
    let divisor: f64 = divisor_input.trim().parse().expect("Invalid number");
    
    // TODO: Rufen Sie Ihre Divisionsfunktion auf und verwenden Sie match, um das Result zu verarbeiten
    // Geben Sie "Result: [value]" für den Ok-Fall aus
    // Geben Sie "Error: [error]" für den Err-Fall aus
}
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 Logic & Flow