Récapitulatif - Point affichable
Fait partie de la section Programmation Orientée Objet du Journey Rust de Coddy. Leçon 39 sur 61.
Défi
FacileRéunissons tous les traits standard que vous avez appris en créant une structure Point complète, qui peut être déboguée, affichée élégamment et comparée pour vérifier l'égalité !
Vous allez organiser votre code sur deux fichiers :
point.rs: définissez une structurePointpublique avec des champsxetypublics (tous deux de typei32). Votre Point doit prendre en charge trois fonctionnalités :- Affichage de débogage avec
{:?}. Dérivez cette fonctionnalité automatiquement - Affichage convivial avec
{}au format(x, y): implémentez-le manuellement à l'aide destd::fmt::Display - Comparaison d'égalité avec
==: dérivezPartialEq
- Affichage de débogage avec
main.rs: importez votre module point et créez deux instances dePointà l'aide des entrées fournies. Démontrez les trois fonctionnalités en affichant le premier point au format de débogage, le deuxième point au format d'affichage, et en comparant si les deux points sont égaux.
Votre sortie doit montrer les trois fonctionnalités des traits en action :
Debug: Point { x: {x1}, y: {y1} }
Display: ({x2}, {y2})
Equal: {true/false}Par exemple, avec les entrées 3, 5, 3, 5 :
Debug: Point { x: 3, y: 5 }
Display: (3, 5)
Equal: trueEt avec les entrées 10, 20, 5, 15 :
Debug: Point { x: 10, y: 20 }
Display: (5, 15)
Equal: falseVous recevrez quatre entrées : les coordonnées x et y du premier point, suivies des coordonnées x et y du deuxième point. Analysez chacune d'elles comme un i32.
Essayez vous-même
mod point;
use point::Point;
fn main() {
// Lire quatre entrées : x1, y1, x2, y2
let mut input = String::new();
std::io::stdin().read_line(&mut input).expect("Failed to read line");
let x1: i32 = input.trim().parse().expect("Invalid input");
input.clear();
std::io::stdin().read_line(&mut input).expect("Failed to read line");
let y1: i32 = input.trim().parse().expect("Invalid input");
input.clear();
std::io::stdin().read_line(&mut input).expect("Failed to read line");
let x2: i32 = input.trim().parse().expect("Invalid input");
input.clear();
std::io::stdin().read_line(&mut input).expect("Failed to read line");
let y2: i32 = input.trim().parse().expect("Invalid input");
// TODO: Créer deux instances de Point en utilisant les entrées
// TODO: Afficher le premier point en utilisant le format de débogage {:?}
// Format : "Debug: Point { x: ..., y: ... }"
// TODO: Afficher le second point en utilisant le format d'affichage {}
// Format : "Display: (..., ...)"
// TODO: Comparer les deux points et afficher le résultat
// Format : "Equal: true" ou "Equal: false"
}
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