ماهنامهٔ دوم - تیر ۱۴۰۳
از اینکه دومین ماهنامه فوسفا را مطالعه میکنید خرسندم و باید پیش از مطالعه این ماهنامه اعلام کنم که این ماهنامه برخلاف ماهنامه ماه پیش توسط تمام اعضای …
ادامه مطلببهه رفقا چطورین؟
شهریار هستم و امیدوارم حالتون عالی عالی باشه و خوش اومدید به اولین پست من در سایت FOSSFA.
دیروز داشتم برای خودم توی سایت های پایتونی میچرخیدم که چشمم به یک مطلب خیلی جالب خورد.داستان از این قراره که توی پایتون3.10 قراره شاهد ورود ساختار match یا همون سوییچ کیس ها باشیم.به ذهنم رسید شاید خیلی از پایتون دولوپرها با این ساختار آشنا نباشن.برای همین تصمیم گرفتم که توی این مطلب درباره این ساختار ونحوه پیاده سازیش توی پایتون توضیح بدم
خب برای اینکه ببینیم این ساختار چیه و جه کمکی به ما میکنه بذارید با یک مثال شروع کنیم.فرض کنید که من میخوام یک برنامه بنویسم که از کاربرم ورودی بگیرم و به ازای هر عددی که وارد میکنه یکی از روزهای هفته رو نمایش بدم.خب من میتونم این شکلی توی پایتون بنویسم:
number = int(input("Enter your number Between 1 and 7: "))
if number == 1:
print("shanbe")
elif number == 2:
print("yekshanbe")
elif number == 3:
print("Doshanbe")
elif number == 4:
print("seshanbe")
elif number == 5:
print("charshanbe")
elif number == 6:
print("pangshanbe")
elif number == 7:
print("jomee")
else:
print("Error")
خب همونطور که دارید میبینید توی این برنامه من کلی if و elif ردیف کردم پشت هم.این برنامه علاوه بر اینکه ظاهر خوبی نداره من باید هربار هی بیام و توی شرطم بگم که هم ارزی متغیرم با مقادیری که توی ذهنمه مقایسه کنه. حالا من میام این برنامه رو مجددا مینویسم با این تفاوت که اینبار قراره با ساختار مچ کیس یا همون سوییچ کیسی که قراره توی پایتون بیاد بنویسمش.
number = int(input("Enter your number Between 1 and 7: "))
match number:
case 1:
print("shanbe")
case 2:
print("yekshanbe")
case 3:
print("doshanbe")
case 4:
print("seshanbe")
case 5:
print("charshanbe")
case 6:
print("pangshanbe")
case 7:
print("jome")
case _:
print("Error")
خب بیاین کدمون رو تحلیل کنیم تا ببینیم این کد چجوری کار میکنه.
خب توی قدم اول اگه نگاه کنید بعد از گرفتن ورودی از کاربر با این عبارت مواجه میشیم.
match number
ما توی این بخش متغیرمون رو در ساختار مچ قرار میدیم.وقتی اینو مینویسم عملا دارم به برنامم میگم که تو متغیر
number
رو زیر نظر داشته باش و حواست باشه چه مقداری داخلش قرار میگیره.
توی خطوط بعدی یکسری کد مبینیم که مثل شرط و حلقه دقيقا بايد زیر مجموعه ساختار مچ ما باشه
اما در بخش دوم یکسری کد میبینیم که تقریبا همشون یک همچین سیستمی رو دارن:
case {{ value }}:
#do someting
خب از همون کلمه
case
شروع میکنیم.مثلا ما وقتی میگیم
case 4
یعنی اگه مقدار متغیری که رو به روی کلمه
match
نوشتم برابر با ۴ بود تو کدی که زیرمجموعه
case
هست رو اجرا کن.یخورایی اون کد بالا برابره با این شرطی که روبروی
if یا elif
قرار میدیم
number == 4
پس ما تا اینجا فهمیدیم ما متغیر مربوطه رو رو به روی match قرار میدیم تا ساختار مچ روی اون متغیر تمرکز کنه و بعد رو به روی case ها میایم و مقداری که میخوایم برابر مقدار متغیرمون باشه رو مینویسیم تا این هم ارزی بررسی و درصورت درست بودن هم ارزی کاری که زیر کیس مینویسیم رو انجام بده
خب همونطور که میدونید ما توی ساختار شرطمون یک else داشتیم که میومدیم و با اون میگفتیم که else درصورتی اجرا میشه که تمام حالت های توی if و elif درست نباشن یا به اصطلاح خودمون مقدار False رو برگردونن.
خب ما همچین مکانیزمی رو توی ساختار مچ یا همون سوییچ در همه زبان های برنامه نویسی داریم. در اکثر زبان های برنامه نویسی ما برای این حالت توی ساختار کنترلی خودمون از
default:
#do something
استفاده میکنیم.اما توی پایتون پیاده سازی این بخش یکخورده متفاوت خواهد بود. ما بجای استفاده از کلمه default از کیس استفاده میکنیم منتها برای مقدار باید از کارکتر آندرلاین (( _ )) استفاده کنیم مثل نمونه کدی که برای برناممون با ساختار مچ نوشتیم.این شکلی به ساختار match میفهمونیم که هروقت مقدار متغیر یکی از مقادیری که در کیس ها تعریف کردیم نبود اونوقت تو بیا و دستوری که زیر مجموعه:
case _:
رو اجرا کن.این کد دقیقا حکم else رو در ساختار match داره.
همونطور که میبینید ما برنامه هایی که به این شکل هستن رو میتونیم خیلی راحت تر و منظم تر بنویسیم.
از نظر من این فیچر باید همون اول شروع پایتون قرار داده میشد اما خب الانم که این کارو کرده یک حرکت رو به جلو برای پایتون محسوب میشه و در آینده از این قابلیت پایتون خیلی زیاد استفاده خواهد شد.
امیدوارم از خوندن این مطلب لذت برده باشید.یادتون نره که حتما حتما نظرتون درباره این مطلب بگید و همینطور بگید که نظرتون درباره این قابلیت جدید پایتون چیه؟
منبع - با تغییرات لازم