Menu
CoddyTech

Komponen Tombol

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

challenge icon

Tantangan

Mudah

Mari lanjutkan membangun Document System dengan menambahkan komponen UI kedua: sebuah Button. Sama seperti TextField, komponen ini akan mengimplementasikan trait Draw, yang menunjukkan bagaimana berbagai tipe dapat berbagi antarmuka yang sama.

Kamu akan memperluas proyekmu dengan file module lainnya:

  • draw.rs: Pertahankan trait Draw dari tantangan sebelumnya.
  • text_field.rs: Pertahankan struct TextField dan implementasi Draw-nya.
  • button.rs: Buat struct Button dengan dua field publik: label (sebuah String) dan width (sebuah u32). Implementasikan trait Draw untuk Button agar pemanggilan draw() mencetak tombol dengan format ini: Button: {label} (width: {width})
  • main.rs: Sertakan ketiga module. Buat TextField dan Button, lalu panggil draw() pada masing-masing untuk menampilkan kedua komponen.

Module button-mu perlu mengakses trait Draw menggunakan crate::draw::Draw, seperti yang kamu lakukan dengan TextField.

Input berikut akan diberikan:

  • Baris pertama: konten text field
  • Baris kedua: label tombol
  • Baris ketiga: lebar tombol (dalam bentuk angka)

Output-mu harus menampilkan text field terlebih dahulu, lalu tombol, masing-masing pada baris tersendiri:

Text: Welcome
Button: Submit (width: 100)

Coba sendiri

mod draw;
mod text_field;
mod button;

use draw::Draw;
use text_field::TextField;
use button::Button;

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 text_field = TextField { content };
    text_field.draw();

    // TODO: Buat Button dengan `label` dan `width`, lalu panggil draw()
    
}

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler Rust online