Komponen Tombol
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Rust di Coddy. Pelajaran 51 dari 61.
Tantangan
MudahMari 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 traitDrawdari tantangan sebelumnya.text_field.rs: Pertahankan structTextFielddan implementasiDraw-nya.button.rs: Buat structButtondengan dua field publik:label(sebuahString) danwidth(sebuahu32). Implementasikan traitDrawuntukButtonagar pemanggilandraw()mencetak tombol dengan format ini:Button: {label} (width: {width})main.rs: Sertakan ketiga module. BuatTextFielddanButton, lalu panggildraw()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
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