Menjalankan Screen
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Rust di Coddy. Pelajaran 53 dari 61.
Tantangan
MudahSelamat karena kamu telah mencapai langkah terakhir proyek Document System! Kamu telah membuat semua bagian satu per satu: trait Draw, TextField, Button, dan Screen. Sekarang saatnya memberi Screen kemampuan untuk merender semua komponennya sekaligus dengan satu pemanggilan method.
Kamu akan menyelesaikan proyekmu dengan menambahkan method run ke struct Screen. Method ini akan menelusuri semua komponen yang tersimpan di screen dan memanggil draw() pada setiap komponen, sehingga seluruh sistem dokumenmu berfungsi.
File proyekmu:
draw.rs: TraitDrawdengan methoddraw.text_field.rs: KomponenTextFieldyang mencetakText: {content}.button.rs: KomponenButtonyang mencetakButton: {label} (width: {width}).screen.rs: StructScreendengan methodnewdanadd. Tambahkan methodrunyang menerima&selfdan memanggildraw()pada setiap komponen dalam koleksi.main.rs: Satukan semuanya: buatScreen, tambahkan komponenmu, lalu panggilrun()untuk merender seluruh screen sekaligus.
Method run merangkum logika rendering di dalam Screen, sehingga fungsi utama tetap rapi dan sederhana. Alih-alih menelusuri komponen secara manual di main, kamu cukup memanggil screen.run().
Input berikut akan diberikan:
- Baris pertama: konten text field
- Baris kedua: label button
- Baris ketiga: lebar button (sebagai angka)
Output harus menampilkan setiap komponen pada barisnya sendiri, sesuai urutan penambahannya:
Text: Dashboard
Button: Save (width: 120)Coba sendiri
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: Ganti iterasi manual di bawah ini dengan satu pemanggilan screen.run()
for component in &screen.components {
component.draw();
}
}Semua pelajaran di Pemrograman Berorientasi Objek
1Method dan Perilaku
Pengantar Blok ImplementasiParameter SelfMethod MutableFungsi TerkaitBeberapa Blok ImplementasiMethod BerantaiRangkuman: Aksi Persegi Panjang4Proyek: Hewan Peliharaan Virtual
Mendefinisikan Hewan PeliharaanMemberi Makan Hewan Peliharaan2Enkapsulasi dan module
Dasar-Dasar moduleKata Kunci publicField privateGetterSetterRekap: Loker AmanLatihan sendiri: Compiler Rust online