Zusammenfassung – Shape-Enum
Teil des Abschnitts Object Oriented Programming der Rust-Journey von Coddy — Lektion 18 von 61.
Aufgabe
EinfachLassen Sie uns einen Geometrierechner erstellen, der ein Enum verwendet, um verschiedene Formen darzustellen, von denen jede ihre eigenen Dimensionen speichert. Ihr Shape-Enum wird demonstrieren, wie ein einzelner Typ verschiedene Datenstrukturen enthalten und durch Methoden ein einheitliches Verhalten bieten kann.
Sie werden zwei Dateien erstellen, um Ihren Code zu organisieren:
shape.rs: Definieren Sie ein öffentlichesShape-Enum mit zwei Varianten:Circle— enthält ein einzelnesf64, das 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. Verwenden Sie für Kreise3.14159als π.main.rs: Binden Sie Ihr shape-Modul ein, erstellen Sie eine Instanz jeder Formvariante unter Verwendung der bereitgestellten Eingaben und geben Sie die Fläche jeder Form aus.
Ihre area-Methode sollte ein f64 zurückgeben. Destrukturieren Sie beim Matching jede Variante, um ihre Dimensionen zu extrahieren, und wenden Sie die entsprechende Formel an:
- Circle area:
π × radius² - Rectangle area:
width × height
Ihre Ausgabe sollte die Fläche jeder Form in einer eigenen Zeile mit genau einer Dezimalstelle anzeigen:
Circle area: {area}
Rectangle area: {area}Zum Beispiel würde bei einem Kreisradius von 5.0 und einem Rechteck mit der Breite 4.0 und der Höhe 6.0 die Ausgabe wie folgt aussehen:
Circle area: 78.5
Rectangle area: 24.0Sie erhalten 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 unter Verwendung von radius
// TODO: Erstelle eine Rectangle-Form unter Verwendung von width und height
// TODO: Gib die Fläche jeder Form mit einer Dezimalstelle aus
// Format: "Circle area: {area}" und "Rectangle area: {area}"
}
Alle Lektionen in Object Oriented Programming
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