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

Rust 08: Packages, Crates & Multi-File Module

Architektur großer Rust-Codebasen: Cargo.toml, Binary vs. Library Crates, das Modulsystem mit mod, use und Sichtbarkeitsregeln.

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

💡 1. Modulhierarchien in Rust

Dateien werden in Rust über den Modulbaum eingebunden. Module schirmen interne Details standardmäßig privat ab:

// In src/main.rs:
mod storage; // Bindet src/storage.rs ein

use storage::Database; // Importiert Typ in den Scope

fn main() {
    let db = Database::connect("localhost");
    db.query();
}

// In src/storage.rs:
pub struct Database {
    pub url: String, // Öffentlich lesbar
}

impl Database {
    pub fn connect(url: &str) -> Self {
        Self { url: url.to_string() }
    }
    pub fn query(&self) { /* ... */ }
}
🏢 Didaktische Analogie: Abteilungen im Firmengebäude

Jedes Modul ist ein Büro mit verschlossener Tür. Nur wer ein `pub`-Schild an die Tür hängt, erlaubt Kollegen aus anderen Büros den Zutritt!

⚡ 2. Quick-Cheat-Sheet

KeywordEinsatzzweckBeispiel
mod name;Deklariert und bindet Moduldatei einIn root (main.rs / lib.rs)
use pfad::Typ;Erzeugt Kurznamen im aktuellen Scopeuse std::collections::HashMap;
pubMacht Element öffentlichpub fn start()
pub(crate)Sichtbar nur im eigenen CrateIdeal für interne Hilfsmodule

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

⚠️ Automatische Datei-Inklusion erwarten

Nur weil eine Datei src/helper.rs existiert, wird sie nicht kompiliert! Sie MUSS explizit in main.rs mit mod helper; deklariert werden.

⚠️ Zirkuläre Abhängigkeiten

Module dürfen sich nicht gegenseitig rekursiv importieren. Halte die Modulhierarchie baumförmig.

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