Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Pattern nâng cao

Pattern (mẫu) là cú pháp để so khớp cấu trúc của một giá trị, đồng thời lấy phần cần thiết ra thành biến. match (chương Enum) là nơi dùng pattern rõ ràng nhất, nhưng không phải nơi duy nhất — chương này hệ thống lại toàn bộ chỗ pattern xuất hiện và các cú pháp pattern chưa gặp.

Nơi dùng pattern

let cũng là một pattern. let x = 5; thực chất là so khớp giá trị 5 với pattern x — pattern đơn giản nhất, một tên biến, luôn khớp với bất kỳ giá trị nào. Pattern phức tạp hơn destructure ngay tại let:

fn main() {
    let (x, y, z) = (1, 2, 3);
    println!("{x} {y} {z}");
}

Tham số hàm cũng là pattern, destructure được ngay trong danh sách tham số:

fn in_toa_do(&(x, y): &(i32, i32)) {
    println!("Toạ độ: ({x}, {y})");
}

fn main() {
    let diem = (3, 5);
    in_toa_do(&diem);
}

for dùng pattern cho biến lặp — (chi_so, gia_tri) destructure trực tiếp tuple mà .enumerate() trả ra:

fn main() {
    let v = vec!['a', 'b', 'c'];

    for (chi_so, gia_tri) in v.iter().enumerate() {
        println!("{chi_so}: {gia_tri}");
    }
}

if let/while let (đã gặp ở chương Enum) cũng dùng pattern, nhưng khác let/for/tham số hàm ở một điểm quan trọng — nói ở phần tiếp theo.