أساسيات التفرع الشرطي في بايثون | بدائل switch وشرح match case

1. أساسيات التفرع الشرطي في Python

تُستخدم لغة Python على نطاق واسع كلغة برمجة بسيطة وقوية، ويُعتبر التفرع الشرطي جزءًا أساسيًا للتحكم في سير عمل البرنامج. في هذه المقالة، نشرح أساسيات التفرع الشرطي في Python وكذلك الطرق البديلة لجملة switch.

ما هو التفرع الشرطي في Python؟

التفرع الشرطي في Python يعني التحكم في تدفق البرنامج بناءً على شرط معين. على سبيل المثال، عند تنفيذ معالجة مختلفة حسب قيمة متغير، يتم استخدام التفرع الشرطي. في Python نستخدم جملة if لتحقيق ذلك.

البنية الأساسية لجمل if-elif-else

يُكتب التفرع الشرطي في Python باستخدام جملة if كما يلي:

x = 10
if x > 5:
    print("x أكبر من 5")
elif x == 5:
    print("x يساوي 5")
else:
    print("x أصغر من 5")

في هذا المثال، إذا كانت قيمة x أكبر من 5 سيتم طباعة “x أكبر من 5″، وإذا لم يتحقق الشرط فسيتم التحقق من الشرط التالي وهكذا. يمكن إضافة المزيد من elif للتعامل مع حالات إضافية.

لماذا لا توجد جملة switch في Python؟

في العديد من لغات البرمجة توجد جملة switch لتبسيط التفرع الشرطي، لكن Python لا تحتوي عليها. السبب هو أن Python تشجع على كتابة كود بسيط وواضح، وتعتبر أن if-elif-else كافٍ لتحقيق نفس الوظائف بدون تعقيد إضافي.

2. سبب غياب switch في Python

صمم مطورو Python اللغة لتكون بسيطة وسهلة الفهم، ولذلك تجنبوا إضافة تراكيب نحوية معقدة مثل switch. فقد اعتبروا أن if-elif-else كافية لاستبدالها.

فلسفة Python: البساطة والوضوح

تعتمد فلسفة Python على مبدأ “البساطة أفضل”. لذلك تم تبني أسلوب تجنب التراكيب الطويلة والمعقدة، والاكتفاء باستخدام if-elif-else بمرونة.

استخدام if-elif-else للتفرع الشرطي

يمكن لجملة if-elif-else أن تحقق نفس وظائف switch. على سبيل المثال، عند تنفيذ تعليمات مختلفة حسب اليوم:

day = "الثلاثاء"

if day == "الاثنين":
    print("اليوم هو الاثنين")
elif day == "الثلاثاء":
    print("اليوم هو الثلاثاء")
else:
    print("اليوم غير صالح")

يمكن بهذه الطريقة كتابة التفرعات بسهولة، لكن عند زيادة الشروط قد يصبح الكود مطولًا مما يستدعي حلولاً أكثر كفاءة.

3. طرق بديلة لجملة switch في Python

بما أن Python لا تحتوي على switch، يمكن استخدام طرق بديلة للتفرع. فيما يلي أكثر الطرق شيوعًا.

استخدام القواميس (dict)

من الطرق البديلة استخدام نوع البيانات dict (القاموس) لتنفيذ وظائف مشابهة لـ switch.

def case_one():
    return "هذه هي الحالة 1"

def case_two():
    return "هذه هي الحالة 2"

switch_dict = {
    1: case_one,
    2: case_two
}

x = 1
print(switch_dict.get(x, lambda: "حالة غير صالحة")())

بهذا الأسلوب يمكن ربط المفاتيح بالدوال، مما يجعل الكود أبسط وأكثر قابلية للقراءة مقارنة بـ if-elif-else.

مزايا وعيوب استخدام القواميس

يساعد القاموس على تحسين وضوح الكود وإدارة الحالات بشكل أفضل، لكنه غير مناسب عند وجود شروط معقدة، حيث يظل if-elif-else أفضل.

4. استخدام match في Python 3.10 فما فوق

اعتبارًا من Python 3.10 تم تقديم جملة match، وهي بديل قريب من switch وتسمح بتنفيذ التفرع عبر “مطابقة الأنماط” (Pattern Matching).

أساسيات match

تعمل جملة match على مقارنة القيمة مع عدة حالات وتنفيذ أول حالة مطابقة.

def get_grade(score):
    match score:
        case 90 <= score <= 100:
            return "A"
        case 80 <= score < 90:
            return "B"
        case _:
            return "F"

grade = get_grade(85)
print(grade)

بهذا الشكل يمكن كتابة شروط متعددة بشكل أوضح وأكثر قوة.

5. دليل استخدام كل طريقة

الطرق الثلاثة (if-elif-else، القواميس، match) لكل منها مميزات. إليك كيفية الاختيار:

عندما تكون الشروط قليلة

استخدم if-elif-else، فهي الأسهل والأكثر وضوحًا في البرامج الصغيرة.

عندما تكون الشروط كثيرة

عند وجود حالات متعددة أو استدعاء دوال مختلفة، فإن القواميس توفر كودًا أكثر تنظيمًا وقابلية للصيانة.

عندما تكون الشروط معقدة أو تتطلب مطابقة أنماط

في Python 3.10 أو أحدث، يُفضل استخدام match لأنها تدعم التفرعات المعقدة ومطابقة الأنماط بكفاءة عالية.