آموزش #F قسمت ۱۱

https://virgool.io/fsharp/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-f-%D9%82%D8%B3%D9%85%D8%AA-%DB%B1%DB%B0-pmc2g16wxysi

در همه زبانهای برنامه نویسی دستور switch رو داریم که توی زبانهای فانکشنال معمولا اسمش match‌ هست. pattern matching در زبان اف شارپ بسیار قوی هست به حدی که توی زبان سی شارپ ۸ اومدن شبیه اونو پیاده کردند. به کد زیر توجه کنید:

let printSeason month =
   match month with
   | "December" | "January" | "February" -> printfn "Winter"
   | "March" | "April" -> printfn "Spring"
   | "May" | "June" -> printfn "Summer"
   | "July" | "August" -> printfn "Rainy"
   | "September" | "October" | "November" -> printfn "Autumn"
   | _ -> printfn "Season depends on month!"

printSeason "February"
printSeason "April"
printSeason "November"
printSeason "July"

توضیح کد:

  1. یک تابع به نام printSeason‌ که یک ورودی به نام month‌ میگیره تعریف می کنیم.
  2. میگیم ورودی month‌ رو با شرایط پایین بسنج(match month with)
  3. اگر ورودی December, January, February‌ بود Winter رو چاپ کن( فارسیش این میشه اگر این ماهها بود زمستان رو چاپ کن)
  4. اگر ورودی March, April‌ بود Spring‌ رو چاپ کن.
  5. اگر ورودی May, June‌ بود Summer‌ رو چاپ کن.
  6. اگر ورودی July یا August‌ بود Rainy‌ رو چاپ کن.
  7. اگر ورودی September, October, November‌ بود Autumn‌ رو چاپ کن.
  8. اگر ورودی مطابقت نداشت Season depends on month! رو چاپ کن. درواقع یعنی خطا بده.

خطهای بعدی هم که تابع رو با یک ورودی وارد می کنیم تا کدمون رو تست کنیم. مثلا تابع برای February برامون Winter رو چاپ می کنه.

توضیحات تکمیلی:

  • Pattern matching با کلمات کلیدی match و with مشخص میشن.
  • برای هر شرط یا همون case‌ در دستورات از اپراتور | (پایپ Pipe) استفاده می کنیم. همونطور که تو کد بالا میبینید میتونیم چندین شرط رو باهم بنویسیم مثلا اگر یکی از این شرطها برقرار بود یک کار خاصی رو انجام بده.
  • در واقع علامت _| همون default‌ در دستور switch case بقیه زبانهاست. یعنی اگر شرایط بالا برقرار نبود این رو اجرا کن. و وجودش برای جلوگیری از خطا ضروریه هرچند اگر ننویسید هم کامپایلر ارور نمیده و کدتون اجرا خواهد شد.