Menu
CoddyTech

Menjalankan Screen

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Rust di Coddy. Pelajaran 53 dari 61.

challenge icon

Tantangan

Mudah

Selamat 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: Trait Draw dengan method draw.
  • text_field.rs: Komponen TextField yang mencetak Text: {content}.
  • button.rs: Komponen Button yang mencetak Button: {label} (width: {width}).
  • screen.rs: Struct Screen dengan method new dan add. Tambahkan method run yang menerima &self dan memanggil draw() pada setiap komponen dalam koleksi.
  • main.rs: Satukan semuanya: buat Screen, tambahkan komponenmu, lalu panggil run() 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

Latihan sendiri: Compiler Rust online