Exécution de l'écran
Fait partie de la section Object Oriented Programming du Journey Rust de Coddy. Leçon 53 sur 61.
Défi
FacileFélicitations pour avoir atteint l'étape finale du projet Document System ! Vous avez construit toutes les pièces individuelles — le trait Draw, TextField, Button et Screen. Il est maintenant temps de donner à votre Screen la capacité de rendre tous ses composants à la fois avec un seul appel de méthode.
Vous allez terminer votre projet en ajoutant une méthode run à la structure Screen. Cette méthode itérera à travers tous les composants stockés dans l'écran et appellera draw() sur chacun d'eux, donnant ainsi vie à l'ensemble de votre système de documents.
Vos fichiers de projet :
draw.rs: Votre traitDrawavec la méthodedraw.text_field.rs: Votre composantTextFieldqui afficheText: {content}.button.rs: Votre composantButtonqui afficheButton: {label} (width: {width}).screen.rs: Votre structureScreenavec les méthodesnewetadd. Ajoutez une méthoderunqui prend&selfet appelledraw()sur chaque composant de la collection.main.rs: Rassemblez tout — créez unScreen, ajoutez vos composants et appelezrun()pour rendre l'écran entier d'un seul coup.
La méthode run encapsule la logique de rendu à l'intérieur de Screen, rendant votre fonction principale propre et simple. Au lieu d'itérer manuellement à travers les composants dans main, vous appelez simplement screen.run().
Les entrées suivantes seront fournies :
- Première ligne : le contenu du champ de texte (text field)
- Deuxième ligne : le libellé du bouton (button's label)
- Troisième ligne : la largeur du bouton (sous forme de nombre)
Votre sortie doit afficher chaque composant sur sa propre ligne, dans l'ordre où ils ont été ajoutés :
Text: Dashboard
Button: Save (width: 120)Essayez vous-même
mod draw;
mod text_field;
mod button;
mod screen;
use draw::Draw;
use text_field::TextField;
use button::Button;
use screen::Screen;
pub struct Label {
pub text: String,
}
impl Draw for Label {
fn draw(&self) {
println!("{}", self.text);
}
}
fn main() {
let mut input1 = String::new();
std::io::stdin().read_line(&mut input1).expect("Failed to read line");
let content = input1.trim().to_string();
let mut input2 = String::new();
std::io::stdin().read_line(&mut input2).expect("Failed to read line");
let label = input2.trim().to_string();
let mut input3 = String::new();
std::io::stdin().read_line(&mut input3).expect("Failed to read line");
let width: u32 = input3.trim().parse().expect("Failed to parse width");
let mut screen = Screen::new();
let text_field = TextField { content };
screen.add(Box::new(text_field));
let button = Button { label, width };
screen.add(Box::new(button));
// TODO: Remplacer l'itération manuelle ci-dessous par un seul appel à screen.run()
for component in &screen.components {
component.draw();
}
}Toutes les leçons de Object Oriented Programming
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