بايثون for-else: الدليل الكامل لفهم واستخدام بنية الحلقات المتقدمة

1. ما هي بنية for-else في بايثون؟

في بايثون توجد بنية فريدة تسمى for-else، وهي غير شائعة في معظم لغات البرمجة الأخرى. هذه البنية تسمح بكتابة كتلة else يتم تنفيذها فقط إذا انتهت الحلقة بشكل طبيعي دون انقطاع. أي أن كتلة else تعمل فقط عندما يتم تنفيذ الحلقة حتى النهاية، بينما إذا توقفت الحلقة باستخدام break فلن يتم تنفيذ else. ميزة هذه البنية أنها تجعل الكود أبسط وأكثر وضوحًا.

مثال:

for i in range(5):
    print(i)
else:
    print("انتهت الحلقة بشكل طبيعي.")
في هذا المثال، يتم تنفيذ كتلة else بعد اكتمال الحلقة بشكل كامل، وسيتم طباعة الرسالة “انتهت الحلقة بشكل طبيعي”. لكن إذا أُدخلت عبارة break داخل الحلقة، فلن يتم تنفيذ كتلة else.

2. الاستخدام الأساسي لبنية for-else

لفهم كيفية استخدام for-else يجب أولاً مراجعة كيفية عمل الحلقات for وعبارة break. في العادة، تقوم حلقة for بتكرار عناصر النطاق أو القائمة، وإذا كان هناك سبب لإنهاء الحلقة مبكرًا، نستخدم break.

مثال أساسي على for-else:

for i in range(5):
    if i == 3:
        break
    print(i)
else:
    print("انتهت الحلقة بشكل طبيعي.")
في هذا الكود، عند تحقق الشرط i == 3 يتم تنفيذ break، وبالتالي لن يتم تنفيذ else. أما إذا لم يتم تنفيذ break، فإن else ستعمل بشكل طبيعي. هذا يتيح التمييز بسهولة بين الحلقة التي اكتملت والحلقة التي توقفت مبكرًا.
年収訴求

3. أمثلة عملية على for-else

تستخدم for-else في التحقق من وجود عناصر أو البحث في البيانات بكفاءة. المثال التالي يبحث عن عنصر داخل قائمة: إذا وُجد يتوقف البحث بـ break، وإذا لم يُوجد يتم تنفيذ else.

مثال على البحث في البيانات:

numbers = [1, 2, 3, 4, 5]
target = 3

for num in numbers:
    if num == target:
        print(f"{target} تم العثور عليه.")
        break
else:
    print(f"{target} لم يتم العثور عليه.")
في هذا المثال، إذا وُجد target داخل القائمة يتم تنفيذ break وتخطي else. أما إذا لم يتم العثور عليه، فسيتم تنفيذ else وطباعة رسالة بعدم وجود العنصر.

4. دور break وcontinue

في بايثون يمكن التحكم في تدفق الحلقة باستخدام break وcontinue. – break: ينهي الحلقة بالكامل. – continue: يتجاوز التكرار الحالي ويكمل التكرارات التالية. في بنية for-else، إذا تم إنهاء الحلقة باستخدام break فلن يتم تنفيذ else. بينما عند استخدام continue تبقى الحلقة طبيعية ويُنفذ else بعد اكتمالها.

مثال على break مع else:

for i in range(5):
    if i == 3:
        break
    print(i)
else:
    print("انتهت الحلقة.")

مثال على continue مع else:

for i in range(5):
    if i == 3:
        continue
    print(i)
else:
    print("انتهت الحلقة.")
في المثال الأخير، عند i == 3 يتم تجاوز التكرار فقط، لكن الحلقة تنتهي بشكل طبيعي وبالتالي يُنفذ else.
RUNTEQ(ランテック)|超実戦型エンジニア育成スクール

5. مقارنة عند عدم استخدام for-else

بدون استخدام for-else غالبًا ما يتم استخدام متغير “علم” (flag) لتتبع ما إذا كانت الحلقة قد اكتملت. لكن هذا يجعل الكود أطول وأقل وضوحًا.

مثال باستخدام متغير flag:

flag = False
for i in range(5):
    if i == 3:
        flag = True
        break

if flag:
    print("تم تحقق الشرط.")
else:
    print("لم يتم تحقق الشرط.")
في هذا المثال يصبح الكود أطول ويحتاج إلى متغير إضافي. بينما باستخدام for-else يمكن كتابة الكود بشكل أبسط وأكثر قابلية للقراءة.

6. ملاحظات وأفضل الممارسات

عند استخدام for-else يجب الانتباه إلى أن كتلة else تُنفذ فقط عند اكتمال الحلقة طبيعيًا، أما إذا استُخدم break فلن تُنفذ. لذلك يوصى باستخدامها لتحسين وضوح الكود عند الحاجة، لكن إذا لم يكن else ضروريًا فلا داعي لكتابته.

7. الخلاصة

بنية for-else في بايثون أداة مفيدة لكتابة كود أوضح وأبسط. فهي تساعد على التمييز بين الحلقات التي انتهت بشكل طبيعي وتلك التي توقفت بـ break. باستخدامها يمكن الاستغناء عن المتغيرات الإضافية وتحسين قابلية قراءة الكود، مما يجعل البرامج أكثر كفاءة وتنظيمًا.