Skip to content

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

TuanNDA
Updated date:
Edit this post

Table of contents

Open Table of contents

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:


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!

Previous
Tự học Rust - Bài 7: Vòng lặp (Loops)
Next
Tự học Rust - Bài 5: Cấu trúc điều kiện If...Else