مقدمه

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

خلاصه‌سازی برخی عبارات کنترلی با سینتکس if let

کاربرد سینتکس if let این است که در برخی موارد، می‌تواند جایگزین یک عبارت match شود و همان کار را به شکلی مختصرتر و جمع و جورتر انجام دهد. به کد زیر نگاه کنید.

Copy Icon src/main.rs
fn main() {
  let config_max = Some(3u8);
  match config_max {
    Some(max) => println!("The maximum is configured to be {max}"),
    _ => (),
  }
}

در چنین مواردی که عبارت match فقط در صورت تطابق مقدار مورد نظر با یک الگو کاری انجام می‌دهد و در سایر حالت‌ها هیچ کاری انجام نمی‌دهد، می‌توان از if let استفاده کرد. کد زیر با کد بالایی معادل است اما نسبت به آن مختصرتر است.

Copy Icon src/main.rs
fn main() {
  let config_max = Some(3u8);
  if let Some(max) = config_max {
    println!("The maximum is configured to be {max}");
  }
}

پس، سینتکس if let سینتکس جدیدی نیست و کار متفاوتی را انجام نمی‌دهد. بلکه یک جایگزین برای برخی عبارات match است که فقط به ازای تطابق مقدار مورد نظر با الگوی یکی از بازوهای match کاری را انجام می‌دهند و سایر حالات را نادیده می‌گیرند.

فرم کلی سینتکس if let به صورت if let pattern = expression { } است که به این معناست که در صورت تطابق pattern با expression، کد درون آکلادها اجرا شود. البته if let می‌تواند دارای یک بخش else هم باشد و به فرم زیر باشد.

if let pattern = expression {
  // code 
} else {
  // code 
}

که در این صورت، کد بلاک else در صورت مطابقت نداشتن pattern با expression اجرا می‌شود.

اینکه استفاده از match بهتر است یا if let، به شرایط بستگی دارد و نمی‌توان به این سؤال یک پاسخ قطعی داد. if let نسبت به match از مزیت اختصار برخوردار است و مزیتی که match دارد همان ویژگی جامعیت است که در درس قبل در مورد آن صحبت کردیم و گفتیم که چه مزایایی دارد.