Récapitulatif - Enum Shape
Fait partie de la section Programmation Orientée Objet du Journey Rust de Coddy. Leçon 18 sur 61.
Défi
FacileConstruisons un calculateur de géométrie qui utilise une énumération pour représenter différentes formes, chacune stockant ses propres dimensions. Votre énumération Shape montrera comment un type unique peut contenir différentes structures de données et fournir un comportement unifié grâce à des méthodes.
Vous allez créer deux fichiers pour organiser votre code :
shape.rs: définissez une énumération publiqueShapeavec deux variantes :Circle: contient un seulf64représentant le rayon (syntaxe tuple)Rectangle: contient des champs nommés :width(f64) etheight(f64)
areaqui utilise la correspondance de motifs pour calculer l’aire correcte en fonction de la variante. Pour les cercles, utilisez3.14159comme valeur de π.main.rs: importez votre module de formes, créez une instance de chaque variante de forme à l’aide des entrées fournies, puis affichez l’aire de chaque forme.
Votre méthode area doit renvoyer un f64. Lors de la correspondance, déstructurez chaque variante pour extraire ses dimensions et appliquez la formule appropriée :
- Aire du cercle :
π × radius² - Aire du rectangle :
width × height
Votre sortie doit afficher l’aire de chaque forme sur sa propre ligne, avec exactement une décimale :
Circle area: {area}
Rectangle area: {area}Par exemple, avec un rayon de cercle de 5.0 et un rectangle de largeur 4.0 et de hauteur 6.0, la sortie serait :
Circle area: 78.5
Rectangle area: 24.0Vous recevrez trois entrées : le rayon du cercle, la largeur du rectangle et la hauteur du rectangle.
Essayez vous-même
mod shape;
use shape::Shape;
fn main() {
// Lire les entrées
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: Créer une forme Circle en utilisant le radius
// TODO: Créer une forme Rectangle en utilisant width et height
// TODO: Afficher l'aire de chaque forme avec une décimale
// Format: "Circle area: {area}" and "Rectangle area: {area}"
}
Toutes les leçons de Programmation Orientée Objet
1Méthodes et comportement
Introduction aux blocs d'implémentationLe paramètre SelfMéthodes mutablesFonctions associéesBlocs d'implémentation multiplesChaînage de méthodesRécapitulatif - Actions sur le rectangle4Projet : Animal virtuel
Définir l'animalNourrir l'animal7Traits standards
Le trait DebugLe trait DisplayClone et CopyLes traits d'égalitéRécapitulatif - Point affichable10Projet : Système de documents
Le trait DrawComposant texte2Encapsulation et modules
Bases des modulesLe mot-clé publicChamps privésGettersSettersRécapitulatif - Casier sécurisé5Généricité
Structures génériquesMéthodes génériquesPlusieurs types génériquesFonctions génériquesRécapitulatif - Point de coordonnées8Les Traits comme contraintes
Syntaxe des contraintes de traitContraintes multiplesLa clause whereRetourner des types avec des traitsRécapitulatif - Afficheur générique11Design Patterns en Rust
Le pattern NewtypeCompositionLe trait DropFrom et IntoRécapitulatif - Mock de Smart Pointer3Enums avancées
Enums avec donnéesMéthodes sur les EnumsMatching des variantes de donnéesL'Enum Option revisitéeRécapitulatif - Enum Shape6Définition des Traits
Qu'est-ce qu'un Trait ?Implémenter des TraitsImplémentations par défautRedéfinir les comportements par défautTraits avec paramètresRécapitulatif - Lecteur multimédiaEntraînez-vous par vous-même : Compilateur Rust en ligne