۶

Pattern Matching

قدرت کلمه کلیدی `match` رو برای تصمیم‌گیری‌های پیچیده کشف می‌کنیم.

`match`: یه `if/else` خیلی خیلی قوی!

`match` یکی از قدرتمندترین ابزارهای Rust هست. بهت اجازه می‌ده یه مقدار رو با یه سری "الگو" (Pattern) مقایسه کنی و به محض اینکه اولین الگو جور در اومد، کد مربوط به اون رو اجرا کنی. کامپایلر Rust هم حواسش هست که تو همه حالت‌های ممکن رو پوشش بدی (Exhaustiveness)، که این باعث می‌شه از کلی باگ جلوگیری بشه!

enum Coin {
    Penny,
    Nickel,
    Dime,
    Quarter,
}

fn value_in_cents(coin: Coin) -> u8 {
    match coin {
        Coin::Penny => 1,
        Coin::Nickel => 5,
        Coin::Dime => 10,
        Coin::Quarter => 25,
    }
}

`if let`: وقتی فقط یه حالت برامون مهمه

گاهی وقتا ما فقط به یه حالت خاص از `enum` اهمیت می‌دیم و بقیه‌ش برامون مهم نیست. به جای اینکه یه `match` کامل بنویسیم و برای بقیه حالت‌ها از `_` استفاده کنیم، می‌تونیم از `if let` استفاده کنیم که کوتاه‌تر و خواناتره.

fn main() {
    let some_u8_value = Some(3u8);

    // روش طولانی با match
    match some_u8_value {
        Some(3) => println!("three"),
        _ => (), // برای بقیه حالت‌ها کاری نکن
    }

    // روش کوتاه و باحال با if let
    if let Some(3) = some_u8_value {
        println!("three");
    }
}