🏗️ Lehrpfad 2: Structs, Enums & Error-Handling

Rust 07: Result & der ?-Operator

Robuste Systeme ohne Exceptions: Beherrsche Result, Fehlerpropagierung mit dem ?-Operator und saubere Fehlertypen.

📂 Dateien dieser Lerneinheit:
📄 aufgabe.rs (Startercode) 🧪 test_aufgabe.rs (Tests) 💡 musterloesung.rs (Lösung) 📖 README.md

💡 1. Result-Monade & Fehler-Propagierung

Operationen, die fehlschlagen können, liefern `Result`. Mit dem `?`-Operator werden Fehler ohne Boilerplate nach oben durchgereicht:

use std::fs::File;
use std::io::{self, Read};

// Funktion gibt Result zurück:
fn lese_config(pfad: &str) -> Result {
    let mut file = File::open(pfad)?; // Bei Fehler sofortiger Return von Err!
    let mut inhalt = String::new();
    file.read_to_string(&mut inhalt)?;
    Ok(inhalt)
}
🚨 Didaktische Analogie: Das Rückmeldeformular

Ein Handwerker sprengt nicht das Haus in die Luft (Exception), wenn ein Rohr fehlt. Er kreuzt auf dem Rapportzettel an: Entweder `Ok(fertig)` oder `Err(Ersatzteil fehlt)`, damit der Bauleiter entscheiden kann!

⚡ 2. Quick-Cheat-Sheet

MethodeWirkungBest Practice
?-OperatorExtrahiert Ok oder returniert ErrStandard für Fehlerweiterleitung
.map_err(...)Wandelt Fehlertyp umWichtig für API-Grenzen
.unwrap()Holt Wert, panikt bei ErrNur für Unit-Tests oder Prototypen
.expect("msg")Holt Wert, panikt mit MeldungBesser als unwrap, aber sparsam nutzen

⚠️ 3. Häufige Stolperfallen (Gotchas & Anti-Patterns)

⚠️ Typ-Mismatch bei ?-Operator

Der `?`-Operator verlangt, dass der Fehler der aufgerufenen Funktion in den Fehlertyp der umgebenden Funktion konvertierbar ist (`From`-Trait).

⚠️ Ignorieren von Results mit let _ =

Wer let _ = datei.write(...) schreibt, verschluckt Fehler stumm und riskiert Datenverlust!

🧠 4. Diagnostischer Selbst-Check

Überprüfe dein Verständnis von Ownership, Borrowing und Speichersicherheit, bevor du den Code in der Web-IDE schreibst.

🎯 5. Aufgaben & Checkliste in aufgabe.rs

💻 In Web-IDE öffnen & lösen →