Menu
flag Ar iconالعربيةdown icon

حلقة for في جافا: الصياغة والأمثلة وحلقة for-each المُحسَّنة

شرح حلقة for في جافا: الحلقة الكلاسيكية المكوّنة من ثلاثة أجزاء، والمرور على المصفوفات والقوائم، والحلقات المتداخلة، وbreak وcontinue، وحلقة for-each المُحسَّنة.

تحتوي هذه الصفحة على محررات قابلة للتشغيل - حرّر، شغّل، وشاهد النتيجة فوراً.

حلقة for الكلاسيكية ذات الأجزاء الثلاثة

تُكرّر حلقة for كتلة عددًا محكومًا من المرّات. تجمع صيغة جافا ثلاثة أشياء داخل القوسين، مفصولة بفواصل منقوطة:

تعمل الأجزاء الثلاثة بإيقاع ثابت:

  1. التهيئة (int i = 0) - تُنفَّذ مرة واحدة، قبل أي شيء آخر.
  2. الشرط (i < 5) - يُفحَص قبل كل تكرار؛ وتتوقّف الحلقة عندما يكون خطأً.
  3. التحديث (i++) - يُنفَّذ بعد كل تكرار، قبل فحص الشرط من جديد.

لذا يطبع هذا من i = 0 حتى i = 4. نطاق العدّاد i محصور داخل الحلقة - فهو غير موجود بعد القوس المعقوف الختامي.

العدّ تصاعديًا وتنازليًا وبخطوات

تمنحك الأجزاء الثلاثة تحكّمًا كاملاً في العدّاد:

i-- يُنقِص، وi += 5 يقفز بخطوات من خمسة. يقرّر الشرط التوقّف وفق الاتجاه: استخدم > عند العدّ تنازليًا، و< أو <= عند العدّ تصاعديًا.

المرور على مصفوفة

تتلاءم الحلقة المعدودة بشكل طبيعي مع مصفوفة، باستخدام .length حدًّا وi فهرسًا:

لاحظ أن colors.length حقلٌ بلا أقواس - فالمصفوفات مميّزة بهذا. أما List فتستخدم list.size(). الشرط i < colors.length صحيح: تمتدّ الفهارس من 0 إلى length - 1، لذا فإن استخدام < (وليس <=) يتجنّب خطأ تجاوز الحدود.

حلقة for-each المُحسَّنة

عندما تحتاج فقط إلى كل عنصر ولا تحتاج إلى الفهرس أبدًا، تكون حلقة for المُحسَّنة أنظف وأصعب في ارتكاب الخطأ - فلا يوجد عدّاد قد ينحرف بمقدار واحد:

اقرأ for (String color : colors) على أنها «لكل color في colors». تعمل على المصفوفات وعلى كل ما هو قابل للتكرار. والمقابل: ليس لديك فهرس، ولا تستطيع الإضافة إلى المجموعة أو الحذف منها أثناء المرور عليها (فذلك يُطلِق استثناءً وقت التشغيل عبر ConcurrentModificationException). الجأ إلى الحلقة المعدودة عندما تحتاج إلى أي منهما.

الحلقات المتداخلة

حلقة داخل حلقة - مفيدة للشبكات والجداول والاقترانات الثنائية. تُنفَّذ الحلقة الداخلية بالكامل في كل تكرار للحلقة الخارجية:

يطبع هذا شبكة ضرب بحجم 3x3. أعطِ العدّادات أسماء ذات معنى (row، col) بدلًا من i، j متى صار التداخل عميقًا - فهذا يجنّبك الخلط بين أيّ منها أيّ.

break وcontinue

تُخرِج break من الحلقة فورًا. وتتخطّى continue بقية التكرار الحالي وتقفز إلى خطوة التحديث:

يطبع هذا 1 3 5 7. تتخطّى continue الأعداد الزوجية؛ وتُنهي break الحلقة بمجرد أن يتجاوز i العدد 7. في الحلقات المتداخلة، يؤثّر كلاهما على الحلقة الأكثر داخليةً فقط ما لم تستخدم break مُعنونًا.

احذر من الحلقات اللانهائية

إذا لم يصبح الشرط خطأً أبدًا، تعمل الحلقة إلى ما لا نهاية. السبب المعتاد هو نسيان التحديث أو تحريك العدّاد في الاتجاه الخاطئ:

for (int i = 0; i < 5; i--) {   // i يتناقص فقط -> لا يبلغ 5 أبدًا
    System.out.println(i);
}

تُغفِل الحلقة اللانهائية المقصودة الأجزاء الثلاثة جميعها -for (;;) { ... }- وتعتمد على break بداخلها للتوقّف. استخدم ذلك باعتدال؛ فعادةً ما تكون while (true) أوضح في القراءة.

التالي: حلقات while

تتألّق حلقة for عندما تعرف العدّاد مسبقًا. وعندما تريد التكرار حتى يتغيّر شرط ما - وليس لديك عدّاد واضح - تناسبك حلقة while أكثر. تلك هي الصفحة التالية.

الأسئلة الشائعة

ما هي صياغة حلقة for في جافا؟

تتكوّن حلقة for في جافا من ثلاثة أجزاء بين قوسين مفصولة بفواصل منقوطة: for (التهيئة; الشرط; التحديث) { ... }. على سبيل المثال، for (int i = 0; i < 5; i++) { ... } يبدأ i من 0، ويُنفّذ الجسم طالما i < 5، ويضيف 1 إلى i بعد كل تكرار. الأجزاء الثلاثة كلها اختيارية.

ما الفرق بين حلقة for وحلقة for-each في جافا؟

تستخدم حلقة for الكلاسيكية عدّادًا صريحًا، فتتحكّم أنت في الفهرس والاتجاه - وهي الأفضل عندما تحتاج إلى الفهرس أو تريد تخطّي عناصر. أما حلقة for-each المُحسَّنة، for (النوع عنصر : مجموعة)، فتمرّ على كل عنصر بالترتيب دون فهرس - وهي أنظف عندما تحتاج فقط إلى كل عنصر ولا تحتاج إلى الموضع أبدًا. لا تستطيع حلقة for-each تعديل بنية المجموعة أثناء المرور عليها.

كيف تمرّ على مصفوفة في جافا؟

إمّا أن تُفهرسها بحلقة معدودة -for (int i = 0; i < arr.length; i++) { استخدم arr[i]; }- أو، عندما لا تحتاج إلى الفهرس، استخدم for-each: for (int x : arr) { استخدم x; }. تُظهر المصفوفات حجمها عبر الحقل .length (دون أقواس)، بينما تستخدم القوائم .size().

Coddy programming languages illustration

تعلّم البرمجة مع Coddy

ابدأ الآن