التحكم في مسار الحلقات: الاحتراف في استخدام Break, Continue, Pass


التحكم في مسار الحلقات: الاحتراف في استخدام Break, Continue, Pass

التحكم في مسار الحلقات: الاحتراف في استخدام Break, Continue, Pass

مرحباً أيها المبرمجون! في هذا الدرس الاحترافي، سنتعمق في كيفية التحكم بمرونة وفعالية في مسار تنفيذ الحلقات التكرارية باستخدام الكلمات المفتاحية break، continue، و pass في بايثون. ستتقن معنا هذه الأدوات الأساسية لإنشاء لوجيك أكثر دقة وكفاءة.

1. فهم الكلمة المفتاحية break (الخروج من الحلقة)

تُستخدم break لإنهاء الحلقة التكرارية (سواء for أو while) بشكل كامل وفوري. بمجرد أن يصل المفسّر إلى break، يتم الخروج من الحلقة ويستمر تنفيذ البرنامج من السطر الذي يلي الحلقة مباشرةً.

ملاحظة تقنية: تُستخدم break غالباً عندما يتم العثور على شرط معين يجعل استمرار الحلقة غير ضروري أو غير مرغوب فيه.

لنأخذ مثالاً: البحث عن رقم معين في قائمة، والخروج بمجرد العثور عليه.

print("--- استخدام break ---")
    ارقام = [10, 20, 30, 40, 50, 60]
    الرقم_المطلوب = 40

    for رقم in ارقام:
        # طباعة الرقم الحالي الذي يتم فحصه
        print(f"جاري فحص الرقم: {رقم}")
        if رقم == الرقم_المطلوب:
            # إذا وجدنا الرقم المطلوب، نطبع رسالة ونخرج من الحلقة
            print(f"تم العثور على الرقم المطلوب: {الرقم_المطلوب}!")
            break # الخروج الفوري من حلقة for
    print("انتهى البحث.")

2. فهم الكلمة المفتاحية continue (تجاوز التكرار الحالي)

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

ملاحظة تقنية: تُفيد continue عندما تحتاج إلى تخطي بعض الحالات أو البيانات في حلقة دون إيقاف العملية برمتها.

مثال: طباعة الأرقام الفردية فقط من قائمة، متجاهلاً الأرقام الزوجية.

print("\n--- استخدام continue ---")
    ارقام = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

    for رقم in ارقام:
        if رقم % 2 == 0: # إذا كان الرقم زوجياً
            # نطبع رسالة وننتقل للتكرار التالي دون طباعة الرقم
            print(f"تخطي الرقم الزوجي: {رقم}")
            continue # تخطي باقي هذا التكرار والانتقال للتكرار التالي
        # هذا السطر لن يُنفذ إذا كان الرقم زوجياً
        print(f"الرقم الفردي: {رقم}")
    print("انتهى عرض الأرقام الفردية.")

3. فهم الكلمة المفتاحية pass (لا تفعل شيئاً)

pass هي عملية فارغة في بايثون. لا تفعل أي شيء على الإطلاق. تُستخدم كعنصر نائب (placeholder) عندما تتطلب بنية اللغة وجود عبارة، لكنك لا تريد تنفيذ أي تعليمات برمجية في تلك النقطة بعد. هذا مفيد في المراحل الأولية لتطوير الكود أو لتجنب أخطاء بناء الجملة.

ملاحظة تقنية: pass تحافظ على صحة بنية الكود وتسمح لك بتأجيل تنفيذ جزء معين من المنطق البرمجي.

مثال: حلقة for أو شرط if لم يتم تحديد منطقها بعد.

print("\n--- استخدام pass ---")
    العمليات = ["تحضير البيانات", "معالجة البيانات", "تحليل النتائج"]

    for عملية في العمليات:
        if عملية == "تحضير البيانات":
            print(f"جاري تنفيذ: {عملية}")
            # هنا يمكن أن تكون هناك أكواد لتحضير البيانات
            pass # لا يوجد شيء لتفعله حالياً
        elif عملية == "معالجة البيانات":
            print(f"جاري تنفيذ: {عملية}")
            # يمكن إضافة منطق معالجة البيانات هنا مستقبلاً
            pass
        else:
            print(f"جاري تنفيذ: {عملية}")
            # يمكن إضافة منطق تحليل النتائج هنا مستقبلاً
            pass
    print("انتهى تخطيط العمليات.")

    # مثال آخر لـ pass في دالة لم تكتمل بعد
    def دالة_مستقبلية():
        # هذه الدالة ستنفذ لاحقاً
        pass
    print("\nتم تعريف دالة_مستقبلية ولكنها لا تفعل شيئاً حالياً.")

الكود النهائي الكامل

إليكم السكربت كاملاً يجمع الأمثلة الثلاثة لتوضيح كيفية عمل كل كلمة مفتاحية:

# --- استخدام break ---
    print("--- استخدام break ---")
    ارقام_break = [10, 20, 30, 40, 50, 60]
    الرقم_المطلوب = 40

    for رقم in ارقام_break:
        print(f"جاري فحص الرقم (break): {رقم}")
        if رقم == الرقم_المطلوب:
            print(f"تم العثور على الرقم المطلوب: {الرقم_المطلوب}!")
            break
    print("انتهى البحث باستخدام break.")

    # --- استخدام continue ---
    print("\n--- استخدام continue ---")
    ارقام_continue = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

    for رقم in ارقام_continue:
        if رقم % 2 == 0:
            print(f"تخطي الرقم الزوجي (continue): {رقم}")
            continue
        print(f"الرقم الفردي (continue): {رقم}")
    print("انتهى عرض الأرقام الفردية باستخدام continue.")

    # --- استخدام pass ---
    print("\n--- استخدام pass ---")
    العمليات_pass = ["تحضير البيانات", "معالجة البيانات", "تحليل النتائج"]

    for عملية في العمليات_pass:
        if عملية == "تحضير البيانات":
            print(f"جاري تنفيذ (pass): {عملية}")
            pass # لا يوجد شيء لتفعله حالياً
        elif عملية == "معالجة البيانات":
            print(f"جاري تنفيذ (pass): {عملية}")
            pass
        else:
            print(f"جاري تنفيذ (pass): {عملية}")
            pass
    print("انتهى تخطيط العمليات باستخدام pass.")

    def دالة_تجريبية_pass():
        # هذه الدالة تنتظر التطوير
        pass
    print("\nتم تعريف دالة_تجريبية_pass ولكنها لا تفعل شيئاً حالياً.")

النتيجة المتوقعة

عند تشغيل السكربت النهائي، ستلاحظ المخرجات التالية على الشاشة، والتي توضح سلوك كل كلمة مفتاحية بوضوح:

  • لـ break: سيتم طباعة الأرقام حتى الرقم 40، وعند العثور عليه، ستتوقف الحلقة فوراً ولن يتم فحص الأرقام التي تليه.
  • لـ continue: سيتم طباعة رسائل تخطي للأرقام الزوجية (2، 4، 6، 8، 10)، بينما سيتم طباعة الأرقام الفردية (1، 3، 5، 7، 9) بشكل طبيعي.
  • لـ pass: سيتم طباعة رسائل "جاري تنفيذ" لكل خطوة من خطوات العمليات، ولكن لن يتم تنفيذ أي منطق برمجي إضافي داخل كتل if/elif/else، مما يدل على أن pass لم تفعل شيئاً سوى الحفاظ على بنية الكود. كما سيتم الإشارة إلى تعريف الدالة التي تستخدم pass.