目次
1. المقدمة
Python تحظى بشعبية بين العديد من المبرمجين بفضل بساطتها وبنيتها النحوية البديهية، لكن قد يتفاجأ البعض بغياب بنية «switch-case» الموجودة في لغات أخرى. لذلك، في Python يجب استخدام «if-elif-else» أو «القاموس (dictionary)» لتحقيق نفس المعالجة. في هذه المقالة، سنشرح خطوة بخطوة أساليب التفرع الشرطي التقليدية في Python، والبدائل باستخدام القاموس، وكذلك جملة «match-case» الجديدة التي تم تقديمها في Python 3.10. سيمكنك ذلك من إتقان طرق التفرع الشرطي الفعّالة في Python وتطبيقها في الترميز الفعلي.2. السبب في عدم وجود جملة switch في بايثون
السبب في عدم اعتماد جملة switch-case في بايثون هو بساطتها وقابليتها للقراءة. سعى مصممو بايثون إلى جعل اللغة مختصرة قدر الإمكان وإزالة التكرار والبنى الزائدة. جملة switch مفيدة في لغات أخرى، لكن في بايثون يمكن تحقيق نفس الوظيفة باستخدام جمل “if-elif-else” أو القواميس، لذا لا يُنظر إلى ضرورة إضافة جملة switch. في الواقع، توضح الوثائق الرسمية لبايثون أنه يمكن تغطية وظائف جملة switch باستخدام جمل if-elif-else. الكود التالي هو مثال على جملة switch في لغة C وغيرها.switch (value) {
case 1:
printf("Value is 1");
break;
case 2:
printf("Value is 2");
break;
default:
printf("Other value");
}
في بايثون، يمكن تحويله إلى الشكل التالي.value = 1
if value == 1:
print("Value is 1")
elif value == 2:
print("Value is 2")
else:
print("Other value")
بهذه الطريقة، يمكن لبايثون تنفيذ الفروع الشرطية بسهولة دون الحاجة إلى جملة switch.
3. مثال على استخدام if-elif-else
الطريقة الأساسية لإجراء الفروع الشرطية في بايثون هي جملة «if-elif-else». إنها فعّالة جدًا عند تنفيذ عمليات مختلفة بناءً على عدة شروط. فيما يلي مثال نموذجي على استخدامها.value = 100
if value < 50:
print("القيمة صغيرة")
elif value < 100:
print("قيمة متوسطة")
else:
print("قيمة كبيرة")
في هذا الكود، يتم طباعة رسائل مختلفة بناءً على قيمة المتغير value
. جملة if-elif-else تتيح فروعًا شرطية بسيطة وبديهية.مشكلات عند زيادة عدد الشروط
ومع ذلك، عندما يصبح تعمق جملة if-elif-else عميقًا، قد يصبح الكود صعب القراءة. خاصةً عند التعامل مع شروط معقدة، تكون الطريقة التي تستخدم «القواميس» والتي ستُعرض لاحقًا فعّالة.4. الفروع الشرطية باستخدام القاموس (dictionary)
باستخدام القاموس في بايثون، يمكنك تنفيذ فروع شرطية تشبه جملة switch-case. القاموس هو بنية بيانات تخزن أزواج المفتاح والقيمة، ويمكنه تمثيل فروع شرطية متعددة بشكل مختصر. في المثال التالي، يتم عرض النتيجة المقابلة بناءً على الرقم الذي يدخله المستخدم.numbers = {1: "واحد", 2: "اثنان", 3 "ثلاثة"}
value = int(input("الرجاء إدخال عدد من 1 إلى 3: "))
if value in numbers:
print(f"العدد المختار: {numbers[value]}")
else:
print("الرجاء إدخال عدد من 1 إلى 3")
بهذه الطريقة، باستخدام القاموس، يمكنك الحفاظ على قصر الكود وسهولة قراءته حتى عندما تكون هناك العديد من الشروط.مزايا القاموس
الفروع الشرطية باستخدام القاموس تحتفظ بقراءة عالية للكود وسهولة الصيانة حتى عندما تزداد الشروط، وهذا يعتبر ميزة كبيرة. خاصةً عندما يكون هناك عدة عمليات على القيم، تكون أكثر كفاءة من جملة if-elif-else.5. الميزة الجديدة في Python 3.10: إدخال جملة match-case
جملة “match-case” التي تم تقديمها منذ Python 3.10 هي بنية شبيهة جدًا بجملة switch-case، وتسمح بكتابة عدة شروط بشكل مختصر. هذه الميزة الجديدة قوية بشكل خاص في مطابقة الأنماط، وتُحسّن بشكل كبير قابلية قراءة الكود وصيانته مقارنةً بالطرق التقليدية باستخدام جمل if-elif-else أو القواميس.البنية الأساسية لـ match-case
فيما يلي مثال أساسي لاستخدام جملة match-case.def check_value(value):
match value:
case 1:
print("تم اختيار الواحد")
case 2:
print("تم اختيار الاثنين")
case _:
print("تم اختيار شيء غير 1 أو 2")
في هذا الكود، يتم تنفيذ معالجة مختلفة بناءً على قيمة المتغير value
. يُعتبر case _
معالجة افتراضية تُنفّذ عندما لا يتطابق أي من الشروط.6. أمثلة على تطبيق match-case
عبارة match-case مناسبة للتفرعات الشرطية المعقدة وتطابق الأنماط. على سبيل المثال، يمكن تنفيذ عمليات بناءً على عدد عناصر القائمة أو نوع البيانات.عبارة match-case التي تدعم شروط متعددة
def process_data(data):
match data:
case [x, y]:
print(f"القائمة تحتوي على عنصرين: {x}, {y}")
case [x, y, z]:
print(f"القائمة تحتوي على ثلاثة عناصر: {x}, {y}, {z}")
case _:
print("عدد عناصر القائمة مختلف")
في هذا المثال، يتم تنفيذ عمليات مختلفة بناءً على عدد عناصر القائمة. تتميز عبارة match-case بأنها تسمح بكتابة شروط وأنماط بطريقة بسيطة.7. مقارنة بين if-elif-else، القاموس، و match-case
كل طريقة من طرق التفريع الشرطي لها مزايا وعيوب خاصة بها. أدناه جدول المقارنة.الطريقة | المزايا | العيوب |
---|---|---|
if-elif-else | بسيطة وبديهية | عند وجود شروط كثيرة يصبح الكود معقدًا |
القاموس (dictionary) | قابلة للقراءة العالية وتكون فعّالة عندما تكون الشروط كثيرة | ليس كل الشرط يمكن تمثيله في القاموس |
match-case | فعّالة لتعدد الفروع الشرطية ومطابقة الأنماط | متاحة فقط بدءًا من Python 3.10 |