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

Rust 06: Enums, Option & if let

Entdecke Rusts mächtige Enums mit eingebetteten Datenfeldern, das sichere Null-Handling über Option und prägnantes if let.

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

💡 1. Enums mit Daten & die Option-Monade

Enums in Rust sind algebraische Datentypen (Sum Types). Jede Variante kann unterschiedliche Nutzdaten tragen:

#[derive(Debug)]
pub enum WebEvent {
    PageLoad,
    KeyPress(char),
    Click { x: i64, y: i64 },
}

// Sicheres Null-Handling mit Option:
fn finde_benutzer(id: u32) -> Option {
    if id == 42 {
        Some("SuperAdmin".to_string())
    } else {
        None
    }
}

// Verwendung mit if let:
if let Some(name) = finde_benutzer(42) {
    println!("Gefunden: {}", name);
}
🎁 Didaktische Analogie: Das Überraschungspaket

`Option` ist wie ein Karton: Entweder liegt ein wertvolles Geschenk darin (`Some(T)`), oder der Karton ist leer (`None`). Du kannst nicht mit dem Geschenk spielen, ohne den Karton vorher zu öffnen!

⚡ 2. Quick-Cheat-Sheet

VarianteBedeutungVerarbeitungsmuster
Some(val)Wert ist vorhandenEntpacken mit `match` oder `if let`
NoneKein Wert vorhandenAbfangen mit Fallback (`.unwrap_or()`)
unwrap()Holt Wert direktGefährlich! Panikt bei `None`
if letKompakter Einzelfall-MatchIgnoriert alle anderen Fälle elegant

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

⚠️ Unvorsichtiges unwrap()

Der Aufruf von opt.unwrap() auf einem None bringt das Programm sofort zum Paniken. Bevorzuge match, if let oder .unwrap_or_default().

⚠️ Klassische C-Enums verwechseln

Enums in Rust sind keine bloßen Integer-Konstanten wie in C, sondern echte Datenträger!

🧠 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 →