🚀 انقلاب switch در #C مدرن: Pattern Matching
تو پست قبلی، با switch کلاسیک آشنا شدیم. اما داستان اینجا تموم نمیشه! از #C 7 به بعد، switch یه تحول بزرگ داشته و به یه ابزار فوقالعاده قدرتمند به اسم Pattern Matching مجهز شده.
بیاید ببینیم این قابلیتهای جدید چی هستن و چطور switch رو از یه ابزار ساده، به یه غول تبدیل کردن.
1️⃣ سوییچ روی نوع (Switching on Type)
دیگه محدود به مقادیر ثابت نیستید! حالا میتونید یه متغیر از نوع object رو به switch بدید و بر اساس نوع واقعی اون در زمان اجرا، تصمیمگیری کنید و حتی همون لحظه اون رو تو یه متغیر جدید بریزید.
void TellMeTheType(object x)
{
switch (x)
{
// اگه x از نوع int بود، اون رو در متغیر i بریز و این بلوک رو اجرا کن
case int i:
Console.WriteLine($"It's an int! Square is {i * i}");
break;
// اگه از نوع string بود...
case string s:
Console.WriteLine($"It's a string! Length is {s.Length}");
break;
case null:
Console.WriteLine("It's null");
break;
default:
Console.WriteLine("I don't know what it is");
break;
}
}
2️⃣ اضافه کردن شرط با when
گاهی اوقات، فقط چک کردن نوع کافی نیست و میخواید یه شرط اضافه هم داشته باشید. کلمه کلیدی when به شما اجازه میده دقیقاً همین کار رو بکنید.
void ProcessShape(object shape)
{
switch (shape)
{
// این case فقط برای دایرههایی اجرا میشه که شعاعشون بزرگتر از 10 هست
case Circle c when c.Radius > 10:
Console.WriteLine("Big circle");
break;
case Circle c:
Console.WriteLine("Small or medium circle");
break;
case bool b when b == true: // فقط وقتی که بولین، true باشه
Console.WriteLine("It's true!");
break;
}
}
3️⃣ نکات تکمیلی و مهم
اهمیت ترتیب: برخلاف switch کلاسیک، در Pattern Matching ترتیب caseها مهمه! #C اونها رو از بالا به پایین چک میکنه و به محض رسیدن به اولین گزینهی منطبق، کار تموم میشه.
روی هم چیدن caseها: میتونید چند case مختلف رو برای اجرای یک کد مشترک، روی هم بچینید:
switch (x)
{
case float f when f > 1000:
case double d when d > 1000:
case decimal m when m > 1000:
Console.WriteLine("It's a large number!");
break;
}
🤔 حرف حساب و تجربه شما
این Pattern Matching، دستور switch رو از یه ابزار ساده به یه غول قدرتمند برای کار با دادهها و انواع مختلف تبدیل کرده.
شما از این قابلیتهای مدرن switch تو کدهاتون استفاده میکنید؟ کدوم ویژگیش (سوییچ روی نوع، when، ...) براتون کاربردیتر بوده؟
خب، اینجا که نمیشه همه حرفا رو زد! 😉
ادامهی بحث، سوالات، غر زدنها و گپ و گفتهای خودمونی، فقط تو گروه.
[C# Geeks Hangout]
🔖 هشتگها:
#CSharp #Programming #Developer #DotNet #PatternMatching #SwitchCase #ModernCSharp