القواعد التفاعلية في بيتون: درس بدء المبادرين

بيثون, على الخلف من بعض لغات البرمجيات الأخرى, لم يشمل إلى الإصدار 3.10 إحدى أياً من العبارات الترادية التقليدية. سنقوم في هذا التورية باستكشاف كيف يعمل ما يمكن أن يكون معادل الترادية التقليدية في بيثون وكيف يمكن تطبيقه بواسطة ميزة تناسب الأنماط البنية في بيثون.

فهم العبارات الترادية التقليدية

قبل الإصدار 3.10 لبيثون، كان على مطوري البيثون استخدام عدة أعبار if-elif-else أو قواميس لإحدث الوظائف التقليدية للترادية. هذا مثال بسيط يستخدم if-elif-else:

day = input("Enter the day of the week: ").capitalize() if day == "Saturday" or day == "Sunday": print(f"{day} is a weekend.") elif day in ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"]: print(f"{day} is a weekday.") else: print("That's not a valid day of the week.")
Saturday is a weekend.

قيام بالتعرف والحالة في بيثون 3.10

مع بيثون 3.10، تم إدخال عبارة match وكلمات الحالة التي توفر حلولاً أكثر جمالًا تشبه العبارات الترادية التقليدية في لغات البرمجيات الأخرى.

فهم النسق البنية الأساسي

دعونا نتخيل حالة حيث نريد تصنيف أيام الأسبوع إلى أقسام الأسبوعين أو الأيام الأخرى، وتحديد يوم معين. هذا كيف يمكننا استخدام عبارة match:

day = input("Enter the day of the week: ").capitalize() match day: case "Saturday" | "Sunday": print(f"{day} is a weekend.") case "Monday" | "Tuesday" | "Wednesday" | "Thursday" | "Friday": print(f"{day} is a weekday.") case _: print("That's not a valid day of the week.")
Monday is a weekday.
  • إدخال المستخدم والطريقة capitalize(): نبدأ بالحصول على إدخال المستخدم ليوم الأسبوع ونستخدم مеthod capitalize() لتنسيقه بشكل صحيح (أول حرف كبير، بقية الحروف صغيرة).
  • استخدام العبارة match: نستخدم بعدها عبارة match لتقييم متغير variable day.
  • مطابقة الأنماط مع case:
    • التحقق الأول باستخدام case يفحص ما إذا كان الإدخال هو “Saturday” أو “Sunday”. الرمز “|” المعروف أيضًا باسم مشغل OR بت البت يستخدم لمطابقة أي واحد من أنماط متعددة. إذا كان الإدخال هو أي من هذه الأيام، فإنه يطبع أن اليوم هو عطلة نهاية الأسبوع.
    • الحالة الثانية تغطي جميع أيام الأسبوع عن طريق التحقق من كل منها. إذا كان الإدخال يطابق أي يوم من أيام الأسبوع، فإنه يطبع أن اليوم هو يوم من أيام الأسبوع.
  • الحالة الافتراضية (_): الحالة الأخيرة تعمل كإفتراضية (`else` statement)، تلتقط أي إدخال لا يتطابق مع الأيام المعروفة، مشيرة إلى إدخال غير صالح.
  • لا بيانات الكسر: لاحظ أننا لا نحتاج إلى استخدام break بعد كل حالة. يخرج بايثون تلقائيًا من بيان المطابقة بعد حدوث تطابق ناجح.

بنية match-case أكثر قابلية للقراءة ومختصرة مقارنة بسلسلة من بيانات if-elif-else.

حالات الاستخدام المتقدمة لـ Match و Case في بايثون

تطبيقات علوم البيانات

تعتبر بيانة match-case في Python مفيدة جدا في مهام معالجة البيانات الأولية في علوم البيانات. العملية التحضيرية تتضمن عادة تصنيف البيانات إلى مجموعات مختلفة بحسب معايير محددة.

على سبيل المثال، في مجموعة بيانات من الحيوانات، قد ترغب في تصنيفهم بحسب فئاتهم مثل الثدييات، الطيور، الزواحف، إلخ. وهنا مثال مبسط:

animal = "Eagle" match animal: case "Eagle" | "Parrot": print("Bird") case "Lion" | "Tiger": print("Mammal") case "Python" | "Crocodile": print("Reptile") case _: print("Unknown Class")
Bird

هذه الطريقة تبسط اللوجيكا الشديدة لإذا-أوآخرة وجعل الكود أقراض وقابل للصيانة، خاصة عند التعامل مع مجموعات البيانات الكبيرة والمتعددة الفئات.

سيناريوات تعلم الآلة

في تعلم الآلة، يكون التعامل مع أنواع مختلفة من إدخالات البيانات حاسما. يمكن توظيف هيكل match-case لاستخراج الصفات أو استنباطات النموذج. على سبيل المثال، في نموذج تعلم الآلة يتوقع أوضاع الطقس، يمكن استخدام match-case لتصنيف نطاقات الحرارة إلى ‘بردة’، ‘دافئة’، ‘حارة’، والتي يمكن استخدامها كصفات إدخال للنموذج.

العيوب الشائعة والممارسات الأمثل في حالة Python Switch

تلميحات التنقيح

الخطأ الشائع الذي يحدث عند استخدام match-case في Python هو النسيان من إضافة الشرطة السفلية (_) للحالة الافتراضية، مثل ‘else’ في البيانات if-else التقليدية. هذا قد يؤدي إلى سلوك غير متوقع إذا لم يتم تطابق أي من الحالات الخاصة. دائماً أضف حالة افتراضية للتعامل مع القيم غير المتوقعة أو المتنوعة.

إشكاليات الأداء

ومع أن ماشٍ-كейس هو أداة قوية، يجب أن يتم التفكير في تأثيره على أداء الكود البايثوني، خاصة في التطبيقات الكبيرة الحجم. في مواقف تتضمن عدد كبير من الحالات، أو تماثل تعقيد، قد يؤثر الأداء بشكل potentional. يُؤكد التحليل الأداء واختبار الكود للأداء في مواقف حقيقية لفهم وتخفيف أي قضايا تأثير الأداء الإحتمالية.

ماشٍ-كейس بايثون مقابل النقل-كейس التقليدي

التحليل التجانسي

ماشٍ-كيس بايثون يختلف بشكل كبير عن الجملة النقل-كيس التقليدية التي تجدها في لغات مثل جافا أو سي++. في جافا، على سبيل المثال، يحدد الجملة switch القيمة السكالارية فقط (مثل العدد الصحيح وأنواع الenum),بينما يوفر ماشٍ-كيس بايثون قدرة أكثر مرونة على التماثل التركيبي، مما يسمح بمطابقة أنواع البيانات المعقدة، مثل السلاسل والمثيلات النموذجية. هذا يجعل تنفيذ بايثون أقوى لكنه يتطلب فهم أعمق لمفاهيم التماثل.

دليل التنقل

للمبرمجين الذين يعرفون الجملة النقل-كيس التقليدية في لغات مثل سي++ أو جافا، يتطلب التنقل إلى ماشٍ-كيس بايثون تغييرا في التفكير من التماثل القيمة البسيطة إلى التماثل التركيبي.

من المهم أن تفهم أن ماشٍ-كيس بايثون أكثر من مجرد نقل-كيس؛ إنه أداة متعددة الاستخدام لتفكيك أنواع البيانات واستخراج المعلومات من الهياكل المعقدة. يُؤكد التمرين مع أنواع البيانات المختلفة والنمط لتسليم استخدامها.

الخاتمة

تقدمت إصدارة Python 3.10 بإضافة الجملة match و case والتي توفر ميزة كانت متوقعة بشدة من قبل المطورين الذين يعرفون بجملة switch case في لغات أخرى. إنها توفر طريقة نظيفة وموجزة للتعامل مع أحداث متعددة، مما يحسن قابلية قراءة الشفرة وصلاحيتها للصيانة。

يمكنك الاطلاع على المزيد حول وظائف Python في دليلنا التعليمي الكامل وإستكشاف هذه وغيرها من المفاهيم في ورشة Python المتوسطة.

Source:
https://www.datacamp.com/tutorial/python-switch-case