Eseguire lo schermo
Fa parte della sezione Programmazione orientata agli oggetti del percorso Rust di Coddy. Lezione 53 di 61.
Sfida
FacileCongratulazioni per aver raggiunto l’ultimo passaggio del progetto Document System! Hai creato tutti i singoli elementi: il trait Draw, TextField, Button e Screen. Ora è il momento di dare al tuo Screen la possibilità di eseguire il rendering di tutti i suoi componenti contemporaneamente con una sola chiamata al metodo.
Completerai il progetto aggiungendo un metodo run alla struct Screen. Questo metodo scorrerà tutti i componenti archiviati nello schermo e chiamerà draw() su ciascuno di essi, dando vita all’intero sistema di documenti.
I file del progetto:
draw.rs: il tuo traitDrawcon il metododraw.text_field.rs: il tuo componenteTextField, che stampaText: {content}.button.rs: il tuo componenteButton, che stampaButton: {label} (width: {width}).screen.rs: la tua structScreencon i metodineweadd. Aggiungi un metodorunche prende&selfe chiamadraw()su ogni componente della raccolta.main.rs: unisci tutti gli elementi: crea unoScreen, aggiungi i componenti e chiamarun()per eseguire il rendering dell’intero schermo in una sola volta.
Il metodo run racchiude la logica di rendering all’interno di Screen, rendendo la tua funzione principale pulita e semplice. Invece di scorrere manualmente i componenti in main, ti basta chiamare screen.run().
Verranno forniti i seguenti input:
- Prima riga: il contenuto del campo di testo
- Seconda riga: l’etichetta del pulsante
- Terza riga: la larghezza del pulsante (come numero)
Il tuo output deve visualizzare ogni componente su una riga distinta, nell’ordine in cui sono stati aggiunti:
Text: Dashboard
Button: Save (width: 120)Provalo tu
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: Sostituisci l'iterazione manuale qui sotto con una singola chiamata a screen.run()
for component in &screen.components {
component.draw();
}
}Tutte le lezioni di Programmazione orientata agli oggetti
1Metodi e comportamento
Introduzione ai blocchi implIl parametro selfMetodi mutabiliFunzioni associateBlocchi impl multipliConcatenamento di metodiRiepilogo - Azioni sul rettangolo4Progetto: animale domestico virtuale
Definire l'animaleNutrire l'animale7Trait standard
Il trait DebugIl trait DisplayClone e CopyTrait di uguaglianzaRiepilogo - Punto stampabile10Progetto: sistema di documenti
Il trait DrawComponente di testo2Incapsulamento e moduli
Nozioni di base sui moduliLa parola chiave publicCampi privatiGetterSetterRiepilogo - Armadietto sicuro5Generics
Struct genericheMetodi genericiPiù tipi genericiFunzioni genericheRipasso - Punto di coordinate8I Trait come vincoli
Sintassi dei vincoli sui traitVincoli multipliLa clausola whereRestituire tipi con i traitRiepilogo - Stampante generica11Modelli di progettazione in Rust
Pattern NewtypeComposizioneIl trait DropFrom e IntoRipasso - Mock con smart pointer3Enumerazioni avanzate
Enumerazioni con datiMetodi sulle enumerazioniCorrispondenza delle varianti con datiL'enumerazione Option ripresaRiepilogo - enumerazione Shape6Definizione dei trait
Che cos’è un trait?Implementare i traitImplementazioni predefiniteSovrascrivere le implementazioni predefiniteTrait con parametriRiepilogo - Lettore multimedialeEsercitati da solo: Compilatore Rust online