Rust Grundlagen auf dem PC · Teil 20TutorialEinsteiger

Rust

Rust Grundlagen 20: Option und Result

Fehler kontrolliert behandeln. Verständliche Rust-Lektion mit Beispielen, Übung und Musterlösung.

Kapitel: Praktische Anwendungen

Veröffentlicht am

Teil 20: Option und Result

Lernziel: Fehler kontrolliert behandeln.

Voraussetzungen: Die vorherigen Lektionen, insbesondere Teil 19.

Worum geht es?

Rust bildet einen möglicherweise fehlenden Wert mit Option<T> und Erfolg oder Fehler mit Result<T, E> ab.

Schritt für Schritt

fn temperatur_lesen(text: &str) -> Result<f64, std::num::ParseFloatError> {
    text.trim().parse::<f64>()
}

fn main() {
    match temperatur_lesen("206.5") {
        Ok(temperatur) => println!("{temperatur} °C"),
        Err(fehler) => eprintln!("Fehler: {fehler}"),
    }
}

Option

fn erster_wert(werte: &[f64]) -> Option<f64> {
    werte.first().copied()
}

Das Ergebnis lautet entweder Some(wert) oder None.

Der Fragezeichen-Operator

? gibt einen Fehler an die aufrufende Funktion zurück, wenn eine Operation fehlschlägt:

fn lade_zahl(text: &str) -> Result<i32, std::num::ParseIntError> {
    let zahl: i32 = text.parse()?;
    Ok(zahl)
}

unwrap() und expect() sind beim Experimentieren nützlich, können bei Fehlern aber das Programm abbrechen. Bei echten Benutzereingaben sind match, ? und passende Fehlermeldungen vorzuziehen.

Selbst ausprobieren

Schreibe eine Funktion, die einen eingegebenen Text in u32 umwandelt und Fehler als Result zurückgibt.

Musterlösung anzeigen
fn lies_anzahl(text: &str) -> Result<u32, std::num::ParseIntError> {
    text.trim().parse::<u32>()
}
fn main() {
    match lies_anzahl("12") {
        Ok(wert) => println!("{wert} Teile"),
        Err(e) => eprintln!("Ungültig: {e}"),
    }
}

Das solltest du mitnehmen

  • Fehler kontrolliert behandeln.
  • Nutze cargo run für das Ausführen und cargo check für eine schnelle Fehlerprüfung (ab Teil 4).
  • Experimentiere mit veränderten Werten und beobachte die Compilermeldungen.

Weiterführende Quellen


← Vorheriger Teil | Kursübersicht | Nächster Teil →