Den Screen ausführen
Teil des Abschnitts Objektorientierte Programmierung der Rust-Journey von Coddy. Lektion 53 von 61.
Aufgabe
EinfachHerzlichen Glückwunsch, dass du den letzten Schritt des Document System-Projekts erreicht hast! Du hast alle einzelnen Teile erstellt: das Draw-Trait, TextField, Button und Screen. Jetzt ist es an der Zeit, deinem Screen die Fähigkeit zu geben, alle seine Komponenten gleichzeitig mit einem einzigen Methodenaufruf zu rendern.
Du schließt dein Projekt ab, indem du der Struktur run eine Screen-Methode hinzufügst. Diese Methode durchläuft alle im Bildschirm gespeicherten Komponenten und ruft für jede draw() auf, wodurch dein gesamtes Document System zum Leben erweckt wird.
Deine Projektdateien:
draw.rs: DeinDraw-Trait mit derdraw-Methode.text_field.rs: DeineTextField-Komponente, dieText: {content}ausgibt.button.rs: DeineButton-Komponente, dieButton: {label} (width: {width})ausgibt.screen.rs: Deine StrukturScreenmit den Methodennewundadd. Füge einerun-Methode hinzu, die&selfentgegennimmt und für jede Komponente in der Sammlungdraw()aufruft.main.rs: Führe alles zusammen: Erstelle einenScreen, füge deine Komponenten hinzu und ruferun()auf, um den gesamten Bildschirm auf einmal zu rendern.
Die run-Methode kapselt die Rendering-Logik innerhalb von Screen, wodurch deine Main-Funktion übersichtlich und einfach bleibt. Statt die Komponenten in main manuell zu durchlaufen, rufst du einfach screen.run() auf.
Die folgenden Eingaben werden bereitgestellt:
- Erste Zeile: der Inhalt des Textfelds
- Zweite Zeile: die Beschriftung des Buttons
- Dritte Zeile: die Breite des Buttons (als Zahl)
Deine Ausgabe sollte jede Komponente in einer eigenen Zeile und in der Reihenfolge anzeigen, in der sie hinzugefügt wurden:
Text: Dashboard
Button: Save (width: 120)Probier es selbst
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: Ersetze die manuelle Iteration unten durch einen einzelnen Aufruf von screen.run()
for component in &screen.components {
component.draw();
}
}Alle Lektionen in Objektorientierte Programmierung
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Übe selbstständig: Online-Rust-Compiler