trait ·
impl ·
derive ·
Generic <T> ·
where ·
Associated Types
Traits und Generics sind das Herzstück der Polymorphie in Rust. Sie ermöglichen wiederverwendbaren, typsicheren Code und sind essenziell für die Entwicklung flexibler Bibliotheken und Anwendungen.
Traits definieren gemeinsame Funktionalität, die verschiedene Typen teilen können. Sie sind ähnlich wie Interfaces in anderen Sprachen und ermöglichen Polymorphie zur Compile-Zeit.
impl wird verwendet, um ein Trait für einen bestimmten Typ zu implementieren. Der Typ muss alle Methoden des Traits implementieren (außer solche mit Default-Implementierung).
derive ist ein Attribut, das dem Compiler mitteilt, bestimmte Traits automatisch für einen Typ zu implementieren. Das spart viel Boilerplate-Code.
| Trait | Beschreibung |
|---|---|
| Debug | Formatierung mit {:?} für println! und Debugging |
| Clone | Klonen des Typs mit .clone() |
| Copy | Bitweise Kopie (nur für Typen, die auf dem Stack liegen) |
| PartialEq | Gleichheitsvergleich mit == und != |
| Eq | Totale Gleichheit (erweitert PartialEq) |
| PartialOrd | Vergleichsoperatoren wie <, >, <=, >= |
| Ord | Totale Ordnung (erweitert PartialOrd) |
| Hash | Hash-Wert für HashMap und HashSet |
| Default | Standardwert mit .default() |
derive funktioniert nur für Traits, die vom Compiler unterstützt werden. Für eigene Traits müssen Sie die Implementierung selbst schreiben oder ein Makro-Crate wie derive_more verwenden.
Generics ermöglichen die Definition von Funktionen, Strukturen und Enums, die mit verschiedenen Typen arbeiten können. Sie bieten Typsicherheit bei maximaler Flexibilität.
where Clauses sind eine alternative Syntax für Trait-Bounds. Sie verbessern die Lesbarkeit, besonders bei komplexen Generics mit mehreren Bounds.
where-Clauses für komplexe Generics mit vielen Bounds – das verbessert die Lesbarkeit erheblich. Besonders nützlich bei generischen Funktionen mit mehreren Typparametern.
Associated Types sind Typen, die innerhalb eines Traits definiert werden und von der Implementierung festgelegt werden. Sie machen Traits flexibler und lesbarer.
Item bei Iterator). Sie reduzieren die Anzahl der generischen Parameter und machen den Code lesbarer.
trait
impl
derive
<T>
where
type
trait Summary { fn summarize(&self) -> String; } ·
#[derive(Debug, Clone)]