Teil 18: Traits und Generics
Lernziel: Wiederverwendbare Schnittstellen.
Voraussetzungen: Die vorherigen Lektionen, insbesondere Teil 17.
Worum geht es?
Mit Generics formulierst du Code für mehrere Typen. Traits beschreiben gemeinsames Verhalten.
Schritt für Schritt
use std::fmt::Display;
fn zeige_wert<T: Display>(name: &str, wert: T) {
println!("{name}: {wert}");
}
fn main() {
zeige_wert("Temperatur", 205);
zeige_wert("Material", "PLA");
}
T ist ein Platzhalter für einen Typ. T: Display verlangt, dass Werte dieses Typs angezeigt werden können.
Eigenes Trait
trait Beschreibbar {
fn beschreibung(&self) -> String;
}
struct Sensor { name: String }
impl Beschreibbar for Sensor {
fn beschreibung(&self) -> String {
format!("Sensor: {}", self.name)
}
}
Traits ähneln Schnittstellen in anderen Sprachen. derive kann häufig verwendete Traits für eine Struktur automatisch implementieren, beispielsweise #[derive(Debug)].
Dieses Kapitel ist ein Einstieg, keine vollständige Einführung in generische Programmierung.
Selbst ausprobieren
Erstelle ein generisches zeige_wert und rufe es einmal mit einem Integer und einmal mit einer Fließkommazahl auf.
Musterlösung anzeigen
use std::fmt::Display;
fn zeige_wert<T: Display>(wert: T) { println!("Wert: {wert}"); }
fn main() {
zeige_wert(42);
zeige_wert(21.5);
}
Das solltest du mitnehmen
- Wiederverwendbare Schnittstellen.
- 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.
