Nhập môn khối triển khai
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 1 trên 61.
Trong Rust, struct xác định một kiểu dữ liệu chứa những dữ liệu nào, nhưng không xác định kiểu đó có thể làm gì. Để thêm hành vi cho struct, ta dùng khối triển khai với từ khóa impl.
Khối triển khai liên kết các hàm (được gọi là phương thức) với một struct cụ thể. Đây là cấu trúc cơ bản:
struct Dog {
name: String,
age: u8,
}
impl Dog {
fn bark(&self) {
println!("{} says woof!", self.name);
}
}
Khối impl Dog cho Rust biết mọi thứ bên trong đều thuộc về cấu trúc Dog. Cách tách riêng này giúp định nghĩa dữ liệu gọn gàng, đồng thời cho phép bạn thêm bao nhiêu phương thức tùy thích vào khối triển khai.
Để gọi một phương thức, hãy dùng ký hiệu dấu chấm trên một instance:
fn main() {
let my_dog = Dog {
name: String::from("Rex"),
age: 3,
};
my_dog.bark(); // Đầu ra: Rex says woof!
}
Cách tách dữ liệu (struct) khỏi hành vi (khối impl) là nền tảng để tổ chức code Rust. Trong các bài học tiếp theo, chúng ta sẽ tìm hiểu cách các phương thức truy cập dữ liệu của struct thông qua tham số &self như bạn thấy trong ví dụ trên.
Thử thách
DễTạo một struct Cat với hai trường: name (String) và lives (u8).
Thêm một khối triển khai cho Cat với phương thức (method) tên là meow, nhận &self và in ra tên mèo, theo sau là " says meow!".
Bạn sẽ nhận hai đầu vào:
- Dòng đầu tiên: tên mèo (String)
- Dòng thứ hai: số mạng (u8)
Tạo một instance Cat với các giá trị đã cho và gọi phương thức meow trên instance đó.
Định dạng đầu ra mong đợi:
{name} says meow!Tự làm thử
use std::io;
// TODO: Định nghĩa struct Cat với các trường 'name' (String) và 'lives' (u8)
// TODO: Thêm khối triển khai cho Cat với phương thức (method) 'meow'
fn main() {
let mut name = String::new();
io::stdin().read_line(&mut name).expect("Failed to read line");
let name = name.trim().to_string();
let mut lives_input = String::new();
io::stdin().read_line(&mut lives_input).expect("Failed to read line");
let lives: u8 = lives_input.trim().parse().expect("Failed to parse lives");
// TODO: Tạo một instance của Cat và gọi phương thức meow
}Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
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