Skip to content

Tự học Rust - Bài 15: Mô hình hóa hành vi với Traits

TuanNDA
Published date:
Edit this post

Table of contents

Open Table of contents

1. Định nghĩa một Trait

Chúng ta dùng từ khóa trait để nhóm các chữ ký phương thức (method signatures) lại với nhau.

pub trait Summary {
    fn summarize(&self) -> String;
}

2. Triển khai Trait cho một kiểu dữ liệu

Sử dụng cú pháp impl [Trait Name] for [Type Name].

struct Article {
    title: String,
    author: String,
    content: String,
}

impl Summary for Article {
    fn summarize(&self) -> String {
        format!("{} bởi {}", self.title, self.author)
    }
}

3. Cài đặt mặc định (Default Implementation)

Bạn có thể cung cấp nội dung mặc định cho một phương thức trong Trait. Nếu kiểu dữ liệu không tự triển khai lại, nó sẽ dùng bản mặc định này.

pub trait Summary {
    fn summarize(&self) -> String {
        String::from("(Đọc thêm...)")
    }
}

4. Trait làm tham số (Trait Bounds)

Trait cực kỳ hữu ích khi bạn muốn viết một hàm chấp nhận bất kỳ kiểu dữ liệu nào, miễn là nó có triển khai một Trait nhất định.

pub fn notify(item: &impl Summary) {
    println!("Tin mới: {}", item.summarize());
}

Lời kết Bài 15

Trait là nền tảng cho sự trừu tượng hóa và tái sử dụng mã nguồn trong Rust. Nó giúp bạn định nghĩa “những gì một kiểu dữ liệu có thể làm” thay vì “nó là cái gì”. Ở bài tiếp theo, chúng ta sẽ học một chủ đề cực kỳ quan trọng: Xử lý lỗi (Error Handling) với ResultOption.

Hẹn gặp lại các bạn!

Previous
Tự học Rust - Bài 6: So khớp mẫu với Match (Pattern Matching)
Next
Tự học Rust - Bài 5: Cấu trúc điều kiện If...Else