Thành phần nút
Thuộc phần Lập trình hướng đối tượng trong hành trình Rust của Coddy. Bài học 51 trên 61.
Thử thách
DễHãy tiếp tục xây dựng Hệ thống tài liệu bằng cách thêm thành phần giao diện người dùng thứ hai: Button. Giống như TextField, thành phần này sẽ triển khai trait Draw, cho thấy các kiểu khác nhau có thể dùng chung một giao diện.
Bạn sẽ mở rộng dự án bằng một tệp module khác:
draw.rs: Giữ lại traitDrawtừ các thử thách trước.text_field.rs: Giữ lại cấu trúcTextFieldvà phần triển khaiDrawcủa nó.button.rs: Tạo cấu trúcButtonvới hai trường công khai:label(kiểuString) vàwidth(kiểuu32). Triển khai traitDrawchoButtonđể khi gọidraw(), chương trình in nút theo định dạng này:Button: {label} (width: {width})main.rs: Đưa cả ba module vào. Tạo mộtTextFieldvà mộtButton, sau đó gọidraw()cho từng thành phần để hiển thị cả hai.
Module button cần truy cập trait Draw bằng crate::draw::Draw, giống như bạn đã làm với TextField.
Chương trình sẽ nhận các đầu vào sau:
- Dòng đầu tiên: nội dung của trường văn bản
- Dòng thứ hai: nhãn của nút
- Dòng thứ ba: chiều rộng của nút (dưới dạng số)
Đầu ra cần hiển thị trường văn bản trước, sau đó đến nút, mỗi thành phần trên một dòng riêng:
Text: Welcome
Button: Submit (width: 100)Tự làm thử
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: Tạo Button với `label` và `width`, rồi gọi draw()
}Tất cả bài học trong Lập trình hướng đối tượng
1Phương thức và hành vi
Nhập môn khối triển khaiTham số selfPhương thức có thể thay đổiHàm liên kếtNhiều khối triển khaiNối chuỗi phương thứcÔn tập: thao tác với hình chữ nhật4Dự án: Thú cưng ảo
Định nghĩa thú cưngCho thú cưng ăn7Các trait tiêu chuẩn
Trait DebugTrait DisplayClone và CopyCác trait so sánh bằngÔn tập: Điểm có thể in ra2Tính đóng gói và module
Kiến thức cơ bản về moduleTừ khóa publicTrường riêng tưHàm lấy giá trịHàm thiết lập giá trịÔn tập: tủ khóa an toàn5Kiểu tổng quát
Cấu trúc tổng quátPhương thức tổng quátNhiều kiểu tổng quátHàm tổng quátÔn tập: điểm tọa độTự luyện tập: Trình biên dịch Rust online