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

Rust 05: Structs, impl-Methoden & Konstruktoren

Lerne Datenstrukturen in Rust: Classic Structs, Tuple Structs, Methoden im impl-Block mit &self/&mut self und assoziierte Funktionen.

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

💡 1. Structs & impl-Methodenblöcke

Rust trennt Daten (Struct) und Verhalten (`impl`). Konstruktoren sind assoziierte Funktionen namens `new`:

#[derive(Debug)]
pub struct ServerConfig {
    pub host: String,
    pub port: u16,
    active: bool, // Privates Feld
}

impl ServerConfig {
    // Assoziierte Funktion (Konstruktor ohne self):
    pub fn new(host: &str, port: u16) -> Self {
        Self {
            host: host.to_string(),
            port,
            active: true,
        }
    }

    // Methode mit unveränderlicher Referenz (&self):
    pub fn address(&self) -> String {
        format!("{}:{}", self.host, self.port)
    }

    // Methode mit veränderlicher Referenz (&mut self):
    pub fn deactivate(&mut self) {
        self.active = false;
    }
}
📐 Didaktische Analogie: Passbild & Personalausweis

Das Struct ist das Formular mit Datenfeldern (Name, Größe, Augenfarbe). Der `impl`-Block ist der Schalterbeamte, der den Ausweis stempelt und prüft!

⚡ 2. Quick-Cheat-Sheet

KonstruktSyntaxWirkung
Assoziierte FunktionSelf::new()Kein self, Aufruf via Typ::funktion()
Lesende Methode&selfBorgt Instanz unveränderlich
Mutierende Methode&mut selfExklusiver Schreibzugriff auf Felder
Consuming MethodeselfÜbernimmt Ownership, droppt Instanz am Ende

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

⚠️ Fehlendes mut bei mutierenden Methoden

Ruft man config.deactivate() auf, MUSS die Variable als let mut config = ...; deklariert sein!

⚠️ Shallow Visibility

Ein Struct mit `pub struct User` macht seine Felder NICHT automatisch öffentlich; jedes Feld benötigt bei Bedarf eigenes `pub`!

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