Teil 15: Strukturen und Methoden
Lernziel: Eigene Datentypen definieren.
Voraussetzungen: Die vorherigen Lektionen, insbesondere Teil 14.
Worum geht es?
Eine struct bündelt Felder, die logisch zusammengehören, etwa Informationen zu einem 3D-Drucker.
Schritt für Schritt
struct Drucker {
name: String,
temperatur: f64,
aktiv: bool,
}
impl Drucker {
fn beschreibung(&self) -> String {
format!("{}: {:.1} °C, aktiv: {}", self.name, self.temperatur, self.aktiv)
}
}
fn main() {
let drucker = Drucker {
name: String::from("Neptune 4"),
temperatur: 205.0,
aktiv: true,
};
println!("{}", drucker.beschreibung());
}
impl sammelt Methoden zu einem Typ. &self bedeutet, dass die Methode die Instanz nur ausleiht. Eine Methode mit &mut self darf deren Felder verändern. Eine ohne self kann als zugehörige Funktion, z. B. Drucker::neu(), aufgerufen werden.
Nächster Schritt: Eine Struktur kann auch in einem Vektor gespeichert werden: Vec<Drucker>.
Selbst ausprobieren
Ergänze ein Feld standort: String und eine Methode, die den Standort ausgibt.
Musterlösung anzeigen
struct Drucker { name: String, standort: String }
impl Drucker {
fn zeige_standort(&self) { println!("{} steht in {}", self.name, self.standort); }
}
fn main() {
let d = Drucker { name: "X1C".into(), standort: "Labor".into() };
d.zeige_standort();
}
Das solltest du mitnehmen
- Eigene Datentypen definieren.
- Nutze
cargo runfür das Ausführen undcargo checkfür eine schnelle Fehlerprüfung (ab Teil 4). - Experimentiere mit veränderten Werten und beobachte die Compilermeldungen.
