💡 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;
}
}
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
| Konstrukt | Syntax | Wirkung |
|---|---|---|
| Assoziierte Funktion | Self::new() | Kein self, Aufruf via Typ::funktion() |
| Lesende Methode | &self | Borgt Instanz unveränderlich |
| Mutierende Methode | &mut self | Exklusiver Schreibzugriff auf Felder |
| Consuming Methode | self | Übernimmt Ownership, droppt Instanz am Ende |
⚠️ 3. Häufige Stolperfallen (Gotchas & Anti-Patterns)
Ruft man config.deactivate() auf, MUSS die Variable als let mut config = ...; deklariert sein!
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.