Rust không cung cấp constructors như một thành phần ngôn ngữ,
nhưng có một quy ước chung là sử dụng một hàm liên kết (associated function) có tên new
để tạo đối tượng.
Constructor
Constructor Mặc Định
Rust hỗ trợ constructor mặc định thông qua trait Default
. Điều này cho phép tạo một đối tượng với các giá trị mặc định mà không cần chỉ định thủ công từng thuộc tính.
Ví dụ: Tạo một struct với constructor tùy chỉnh
pub struct Second {
value: u64,
}
impl Second {
// Hàm khởi tạo một instance mới của `Second`.
pub fn new(value: u64) -> Self {
Self { value }
}
// Lấy giá trị của `Second`
pub fn value(&self) -> u64 {
self.value
}
}
fn main() {
let s = Second::new(42);
println!("Giá trị: {}", s.value());
}
🔹 Ở đây, new
là một hàm liên kết không cần tham số self
, giúp tạo một instance mới của Second
.
Constructor với Default Trait
Nếu một struct có thể có giá trị mặc định hợp lý, ta có thể triển khai hoặc tự động derive trait Default
.
Ví dụ: Tạo constructor mặc định với Default
pub struct Second {
value: u64,
}
impl Default for Second {
fn default() -> Self {
Self { value: 0 }
}
}
fn main() {
let s = Second::default();
println!("Giá trị mặc định: {}", s.value);
}
🔹 Khi triển khai Default
, ta có thể gọi Second::default()
để tạo một đối tượng với giá trị mặc định.
Sử dụng Derive Default
#[derive(Default)]
pub struct Second {
value: u64,
}
fn main() {
let s = Second::default();
println!("Giá trị mặc định: {}", s.value);
}
🔹 Với #[derive(Default)]
, Rust tự động triển khai Default
nếu tất cả các trường của struct cũng triển khai Default
.
Khi Nào Nên Sử Dụng new
và Default
?
✅ Sử dụng new
khi muốn cung cấp cách khởi tạo tùy chỉnh với tham số cụ thể.
✅ Sử dụng Default
khi một đối tượng có thể có một giá trị mặc định hợp lý.
✅ Kết hợp cả new
và Default
nếu cần hỗ trợ cả hai cách khởi tạo.
🚀 Tóm lại: Quy ước new
và Default
giúp xây dựng các constructor nhất quán trong Rust, tăng khả năng sử dụng lại và tuân thủ các hướng dẫn thiết kế tốt.