dpway

The middle way!

[Rust][006] Constructor

Tags = [ Rust ]

rust-cheat-sheet

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 newDefault?

✅ 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ả newDefault nếu cần hỗ trợ cả hai cách khởi tạo.

🚀 Tóm lại: Quy ước newDefault 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.