Zusammenfassung – Shape-Enum
Teil des Abschnitts Objektorientierte Programmierung der Rust-Journey von Coddy. Lektion 18 von 61.
Aufgabe
EinfachErstelle einen Geometrie-Rechner, der ein Enum verwendet, um verschiedene Formen darzustellen, wobei jede ihre eigenen Abmessungen speichert. Dein Shape-Enum zeigt, wie ein einzelner Typ verschiedene Datenstrukturen enthalten und durch Methoden einheitliches Verhalten bereitstellen kann.
Du erstellst zwei Dateien, um deinen Code zu organisieren:
shape.rs: Definiere ein öffentlichesShape-Enum mit zwei Varianten:Circle: enthält einen einzelnenf64-Wert, der den Radius darstellt (Tupel-Syntax)Rectangle: enthält benannte Felder:width(f64) undheight(f64)
area-Methode, die Pattern Matching verwendet, um die korrekte Fläche basierend auf der Variante zu berechnen. Verwende für Kreise3.14159als π.main.rs: Binde dein Shape-Modul ein, erstelle mithilfe der bereitgestellten Eingaben eine Instanz jeder Formvariante und gib die Fläche jeder Form aus.
Deine area-Methode sollte einen f64-Wert zurückgeben. Beim Matching soll jede Variante destrukturiert werden, um ihre Abmessungen zu extrahieren und die entsprechende Formel anzuwenden:
- Kreisfläche:
π × radius² - Rechteckfläche:
width × height
Deine Ausgabe sollte die Fläche jeder Form in einer eigenen Zeile mit genau einer Dezimalstelle anzeigen:
Circle area: {area}
Rectangle area: {area}Wenn beispielsweise der Radius eines Kreises 5.0 und die Breite und Höhe eines Rechtecks 4.0 beziehungsweise 6.0 betragen, würde die Ausgabe folgendermaßen aussehen:
Circle area: 78.5
Rectangle area: 24.0Du erhältst drei Eingaben: den Radius des Kreises, die Breite des Rechtecks und die Höhe des Rechtecks.
Probier es selbst
mod shape;
use shape::Shape;
fn main() {
// Eingaben lesen
let mut radius_input = String::new();
std::io::stdin().read_line(&mut radius_input).expect("Failed to read line");
let radius: f64 = radius_input.trim().parse().expect("Invalid number");
let mut width_input = String::new();
std::io::stdin().read_line(&mut width_input).expect("Failed to read line");
let width: f64 = width_input.trim().parse().expect("Invalid number");
let mut height_input = String::new();
std::io::stdin().read_line(&mut height_input).expect("Failed to read line");
let height: f64 = height_input.trim().parse().expect("Invalid number");
// TODO: Erstelle eine Circle-Form mit dem radius
// TODO: Erstelle eine Rectangle-Form mit width und height
// TODO: Gib die Fläche jeder Form mit einer Dezimalstelle aus
// Format: "Circle area: {area}" and "Rectangle area: {area}"
}
Alle Lektionen in Objektorientierte Programmierung
1Methoden und Verhalten
Einführung in ImplementierungsblöckeDer Self-ParameterVeränderliche MethodenAssoziierte FunktionenMehrere ImplementierungsblöckeMethod ChainingRückblick – Rechteck-Aktionen4Projekt: Virtuelles Haustier
Das Haustier definierenDas Haustier füttern7Standard-Traits
Das Debug-TraitDas Display-TraitClone und CopyGleichheits-TraitsZusammenfassung – Druckbarer Punkt10Projekt: Dokumentensystem
Das Draw-TraitText-Komponente2Kapselung und Module
Grundlagen der ModuleDas Public-SchlüsselwortPrivate FelderGetterSetterWiederholung – Sicherer Tresor5Generics
Generische StructsGenerische MethodenMehrere generische TypenGenerische FunktionenZusammenfassung - Koordinatenpunkt8Traits als Einschränkungen
Syntax für Trait BoundsMehrfache BoundsDie Where-KlauselTypen mit Traits zurückgebenRückblick – Generischer Drucker11Design Patterns in Rust
Newtype-PatternKompositionDas Drop-TraitFrom und IntoZusammenfassung – Smart Pointer Mock3Fortgeschrittene Enums
Enums mit DatenMethoden für EnumsMatching von DatenvariantenDas Option-Enum erneut betrachtetZusammenfassung – Shape-Enum6Definition von Traits
Was ist ein Trait?Traits implementierenStandardimplementierungenStandardimplementierungen überschreibenTraits mit ParameternZusammenfassung – Media PlayerÜbe selbstständig: Online-Rust-Compiler