break وcontinue والحلقات المسمّاة
break وcontinue والحلقات المسمّاة
حتى الآن كتبتَ حلقاتٍ تعمل من البداية حتى النهاية وفق شرطها الخاص. لكنّ البرامج الحقيقية غالبًا ما تحتاج إلى قطع الحلقة مبكرًا أو تخطّي دورة واحدة منها. يمنحك Java كلمتَين مفتاحيتَين لذلك — break وcontinue — بالإضافة إلى آلية التسمية التي تُوسّع كلتيهما للعمل عبر الحلقات المتداخلة.
break — الخروج من الحلقة مبكرًا
حين ينفّذ Java الأمر break، يخرج فورًا من أعمق حلقة (أو switch) محيطة به، ثم يكمل من أوّل سطر بعدها. هذا مفيد حين تجد ما كنت تبحث عنه ولا فائدة من الاستمرار.
بدون break ستستمر الحلقة في المرور على 9 و2 رغم أنّ الإجابة معروفة منذ 4.
break من الحلقة الداخلية فقط، وستستمر الخارجية. سنتناول ذلك في قسم التسمية أدناه.
continue — تخطّي دورة واحدة
لا يُنهي continue الحلقة — بل يتخطّى ما تبقّى من جسم الدورة الحالية ويقفز مباشرةً إلى خطوة التحديث (في for) أو العودة لفحص الشرط (في while). استخدمه حين تكون قيمة معيّنة غير مثيرة للاهتمام وتريد تجاوزها.
if (i % 2 != 0) { System.out.print(i + " "); } دون continue. استخدم continue حين يُبسّط المنطق فعلًا — مثلًا حين يتخطّى عدة أسطر من العمل.
break مقابل continue في لمحة سريعة
break— اخرج من الحلقة كليًّا وتابع ما بعدها.continue— تخطّ ما تبقّى من هذه الدورة ثم تحقّق من الشرط مجدّدًا.
break المسمّى — الهروب من الحلقات المتداخلة
الحلقات المتداخلة شائعة في اجتياز المصفوفات ثنائية الأبعاد وعمليات البحث في الشبكات. حين تجد هدفك داخل الحلقة الداخلية، فإنّ break العادي يخرج من الحلقة الداخلية فقط وتستمر الخارجية. يتيح لك break المسمّى الخروج من الحلقتَين معًا دفعةً واحدة.
التسمية مجرّد معرّف يتبعه نقطتان، يُوضع مباشرةً قبل الحلقة التي تريد القدرة على الخروج منها:
بعد break outer ينتقل Java إلى أوّل سطر بعد الحلقة for الخارجية — لن تُزار الصفّ رقم 2 أبدًا.
continue المسمّى — إعادة تشغيل الحلقة الخارجية
يمكنك أيضًا استخدام التسمية مع continue. بدلًا من الانتقال إلى الدورة التالية في الحلقة الداخلية، ينتقل Java إلى الدورة التالية في الحلقة المسمّاة (الخارجية).
مكان وضع التسميات
يجب وضع التسميات مباشرةً قبل جملة حلقة (for أو while أو do-while). لا يمكنها تسمية كتل اعتباطية. بالاتفاق، تُكتب أسماء التسميات بأحرف صغيرة (outer، rows) تمييزًا لها عن الثوابت.
return عادي — فهذا أنظف في الغالب.
مثال متكامل — مسودّة منخل الأعداد الأوّلية
إليك مقطعًا يستخدم break وcontinue معًا: يفحص كل عدد مرشّح ويتخطّى المركّبة منها بـ continue، ثم يتوقّف عند أوّل عدد أوّلي فوق حدّ معيّن.
الخلاصة
breakيخرج من أعمق حلقة فورًا.continueيتخطّى ما تبقّى من الدورة الحالية ويكمل.- break المسمّى يخرج من حلقة خارجية بعينها عبر اسمها.
- continue المسمّى يُعيد تشغيل الدورة التالية في الحلقة الخارجية المسمّاة.
- التسميات أداة قوية — استخدمها حين تُبسّط المنطق فعلًا، وفكّر في دالة مساعدة بديلًا عنها في الحالات المعقّدة.