Current date May 18, 2026
Tự học Rust

Tự học Rust – Bài 17: Generics – Viết mã nguồn linh hoạt

URL copied
Share URL copied
Tự học Rust - Bài 17: Generics - Viết mã nguồn linh hoạt
Tự học Rust – Bài 17: Generics – Viết mã nguồn linh hoạt

1. Generics trong Hàm

Giả sử bạn muốn viết một hàm in ra một giá trị bất kỳ. Thay vì viết cho từng kiểu `i32`, `&str`, chúng ta dùng một tham số kiểu chung (thường được ký hiệu là `T`).

// T là viết tắt của Type
fn print_anything(item: T) {
    println!("{}", item);
}

2. Generics trong Structs

Chúng ta có thể định nghĩa các Struct chứa dữ liệu thuộc bất kỳ kiểu nào.

struct Point {
    x: T,
    y: T,
}

fn main() {
    let integer_point = Point { x: 5, y: 10 };
    let float_point = Point { x: 1.0, y: 4.0 };
}

3. Generics trong Enums

Bạn đã thực sự sử dụng Generics qua `Option` và `Result` mà chúng ta học ở bài trước rồi đó!

enum Option {
    Some(T),
    None,
}

4. Hiệu năng của Generics (Monomorphization)

Bạn có thể lo lắng rằng dùng Generics sẽ làm chương trình chạy chậm hơn? Câu trả lời là Không.

Rust sử dụng một kỹ thuật gọi là Monomorphization. Khi biên dịch, Rust sẽ tự động tạo ra mã nguồn cụ thể cho từng kiểu dữ liệu mà bạn sử dụng. Vì vậy, hiệu năng của mã nguồn dùng Generics tương đương hoàn toàn với việc bạn viết mã riêng cho từng kiểu.

Lời kết Bài 17

Generics giúp mã nguồn của bạn vừa linh hoạt vừa an toàn. Ở bài tiếp theo, chúng ta sẽ tìm hiểu về Lifetimes – một khái niệm độc bản của Rust giúp trình biên dịch đảm bảo các tham chiếu luôn hợp lệ.

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

Share URL copied

Leave a comment

Leave a Reply

Your email address will not be published. Required fields are marked *

Active0
AI3
AI & Automation10

Exclusives

Lifestyle

Related Articles

Tự học Rust – Bài 20: Concurrency – Đa luồng an toàn tuyệt đối

Khám phá cách Rust xử lý lập trình đa luồng mà không...

Tự học Rust – Bài 19: Con trỏ thông minh (Smart Pointers)

Vượt xa các tham chiếu thông thường với Smart Pointers: Box, Rc...

Tự học Rust – Bài 18: Lifetimes – Đảm bảo tham chiếu hợp lệ

Lifetimes là gì? Tại sao Rust cần chúng? Tìm hiểu cách trình...

Tự học Rust – Bài 16: Xử lý lỗi với Result và Option

Rust không có Exceptions! Khám phá cách xử lý lỗi an toàn...