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

Tự học Rust – Bài 6: So khớp mẫu với Match (Pattern Matching)

URL copied
Share URL copied
Tự học Rust - Bài 6: So khớp mẫu với Match (Pattern Matching)
Tự học Rust – Bài 6: So khớp mẫu với Match (Pattern Matching)

1. Cấu trúc Match cơ bản

`match` cho phép bạn so sánh một giá trị với một loạt các “mẫu” (patterns) và thực thi mã dựa trên mẫu nào khớp đầu tiên.

let day = 4;

match day {
    1 => println!("Thứ Hai"),
    2 => println!("Thứ Ba"),
    3 => println!("Thứ Tư"),
    4 => println!("Thứ Năm"),
    5 => println!("Thứ Sáu"),
    6 => println!("Thứ Bảy"),
    7 => println!("Chủ Nhật"),
    _ => println!("Ngày không hợp lệ"),
}

Các thành phần chính:

  • `match variable { … }`: Bắt đầu khối so khớp.
  • `pattern => code`: Nếu khớp mẫu, thực thi code tương ứng.
  • `_` (Underscore): Đây là mẫu đại diện (wildcard), nó sẽ khớp với bất kỳ giá trị nào còn lại. Nó tương đương với `default` trong Java hay C++.

2. Kết hợp nhiều mẫu bằng toán tử OR (`|`)

Bạn có thể gộp nhiều giá trị vào cùng một nhánh xử lý bằng dấu gạch đứng `|`.

let month = 2;

match month {
    1 | 2 | 3 => println!("Mùa Xuân"),
    4 | 5 | 6 => println!("Mùa Hạ"),
    7 | 8 | 9 => println!("Mùa Thu"),
    10 | 11 | 12 => println!("Mùa Đông"),
    _ => println!("Tháng ma thuật?"),
}

3. Sử dụng Match như một biểu thức

Tương tự như `if`, `match` cũng có thể trả về giá trị để gán cho một biến.

let grade = 'B';

let status = match grade {
    'A' => "Xuất sắc",
    'B' => "Khá",
    'C' => "Trung bình",
    _ => "Cần cố gắng thêm",
};

println!("Kết quả: {}", status);

⚠️ Lưu ý về kiểu dữ liệu:

Tất cả các nhánh của `match` phải trả về cùng một kiểu dữ liệu. Bạn không thể trả về số ở nhánh này và chuỗi ở nhánh kia.

4. Tính chất “Exhaustive” (Bao phủ hoàn toàn)

Đây là điểm làm nên sự an toàn của Rust: Compiler sẽ bắt lỗi nếu bạn không liệt kê hết mọi trường hợp có thể xảy ra.

Nếu bạn bỏ quên một trường hợp hoặc không có nhánh `_`, Rust sẽ không cho phép bạn build chương trình. Điều này đảm bảo bạn không bao giờ bỏ sót logic xử lý.

Lời kết Bài 6

`match` là một trong những tính năng được yêu thích nhất trong Rust vì sự rõ ràng và an toàn mà nó mang lại. Ở bài sau, chúng ta sẽ bước sang một phần quan trọng không kém: Vòng lặp (Loops) để xử lý các công việc lặp đi lặp lại.

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 17: Generics – Viết mã nguồn linh hoạt

Sử dụng Generics trong Rust để tạo ra các hàm và cấu...