Trong Rust, nhiều kiểu dữ liệu có constructor riêng, nhưng Rust không thể tổng quát hóa chúng bằng một cơ chế chung. Vì vậy, Default trait ra đời để hỗ trợ việc khởi tạo giá trị mặc định cho các kiểu dữ liệu, đặc biệt hữu ích trong các cấu trúc dữ liệu tổng quát và container như Option::unwrap_or_default().
Default Trait
Lợi Ích Của Default Trait
- Hỗ trợ khởi tạo mặc định: Tạo giá trị mặc định mà không cần truyền tham số.
- Tích hợp tốt với container:
Box
,Arc
,Vec
,Option
có thể tận dụngDefault
. - Tăng tính linh hoạt: Hỗ trợ
#[derive(Default)]
cho các struct có trường đều triển khaiDefault
.
Ví Dụ: Cách Sử Dụng Default Trait
Triển khai Default
thủ công
use std::{path::PathBuf, time::Duration};
#[derive(Debug, PartialEq)]
struct MyConfiguration {
output: Option<PathBuf>,
search_path: Vec<PathBuf>,
timeout: Duration,
check: bool,
}
impl Default for MyConfiguration {
fn default() -> Self {
Self {
output: None,
search_path: Vec::new(),
timeout: Duration::new(0, 0),
check: false,
}
}
}
fn main() {
let conf = MyConfiguration::default();
println!("Configuration: {:?}", conf);
}
🔹 Ở đây, default()
trả về một MyConfiguration
với các giá trị mặc định hợp lý.
Sử dụng #[derive(Default)]
để tự động triển khai
use std::{path::PathBuf, time::Duration};
#[derive(Default, Debug, PartialEq)]
struct MyConfiguration {
output: Option<PathBuf>,
search_path: Vec<PathBuf>,
timeout: Duration,
check: bool,
}
fn main() {
let conf = MyConfiguration::default();
println!("Configuration: {:?}", conf);
}
🔹 Nếu tất cả các trường đều triển khai Default
, ta có thể sử dụng #[derive(Default)]
thay vì tự triển khai.
Khi Nào Nên Sử Dụng Default
?
✅ Khi cần khởi tạo giá trị mặc định một cách nhất quán.
✅ Khi làm việc với các container yêu cầu Default
(ví dụ: Option::unwrap_or_default()
).
✅ Khi muốn tận dụng #[derive(Default)]
để tiết kiệm thời gian viết code.
Kết Luận
Default
trait giúp đơn giản hóa việc khởi tạo giá trị mặc định, cải thiện khả năng tái sử dụng mã nguồn và tích hợp tốt với hệ sinh thái Rust. Hãy sử dụng Default
khi cần một cách khởi tạo nhất quán và dễ duy trì.