💡 1. Result-Monade & Fehler-Propagierung
Operationen, die fehlschlagen können, liefern `Result
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)
}
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
| Methode | Wirkung | Best Practice |
|---|---|---|
?-Operator | Extrahiert Ok oder returniert Err | Standard für Fehlerweiterleitung |
.map_err(...) | Wandelt Fehlertyp um | Wichtig für API-Grenzen |
.unwrap() | Holt Wert, panikt bei Err | Nur für Unit-Tests oder Prototypen |
.expect("msg") | Holt Wert, panikt mit Meldung | Besser als unwrap, aber sparsam nutzen |
⚠️ 3. Häufige Stolperfallen (Gotchas & Anti-Patterns)
Der `?`-Operator verlangt, dass der Fehler der aufgerufenen Funktion in den Fehlertyp der umgebenden Funktion konvertierbar ist (`From`-Trait).
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.