for-each في Java
احفظ ثلاثة أعداد صحيحة في مصفوفة اسمها slots: 2، ثم 4، ثم 6. اكتب for (int n : slots) واطبع n داخل الأقواس المجعدة. يجب أن تظهر الشاشة ثلاثة أسطر: 2، ثم 4، ثم 6. لا تكتب عدّاد فهرس على هذه الصفحة. كل دورة تسلّم القيمة التالية من المصفوفة إلى الاسم n. هذا المشي هو ما تعلّمه هذه الصفحة.
اسم واحد لكل قيمة في المصفوفة
أنشئ ملف برنامج صغير باسم Pack.java. يجب أن يطابق public class في السطر الأول اسم الملف: public class Pack. لا تُبقِ اسم فئة قديمًا مثل Skip أو Pulse في هذا الملف؛ المترجم يتوقع أن يتوافق اسم الفئة مع اسم الملف.
داخل main احفظ المصفوفة أولًا:
int[] slots = {2, 4, 6};
هذا السطر لا يطبع شيئًا. يحتفظ فقط بثلاثة أعداد صحيحة تحت الاسم slots. ثم حلقة for-each:
for (int n : slots) {
System.out.println(n);
}
كلمة for ما زالت بحرف صغير. داخل الأقواس العادية تجلس ثلاث قطع ونقطتان في الوسط: النوع int، الاسم n لعنصر واحد، ثم نقطتان، ثم اسم المصفوفة slots. تلك النقطتان ليستا تسمية case وليستا فاصل مسار. تعني «كل قيمة من slots تدخل في n.» الأقواس المجعدة تحفظ الجسم. System.out.println(n); يكتب القيمة الحالية بلا علامات اقتباس حول n. احفظ الملف قبل الترجمة.
برنامج يطبع 2 ثم 4 ثم 6
هذه هي النسخة التي تترجمها أولًا.
public class Pack {
public static void main(String[] args) {
int[] slots = {2, 4, 6};
for (int n : slots) {
System.out.println(n);
}
}
}
من المجلد الذي يحوي Pack.java اكتب javac Pack.java. عندما تتطابق الأقواس العادية والأقواس المجعدة والنقطتان، لا يكتب javac أي سطر من عنده. ثم اكتب java Pack — وليس java Pack.java. أزل لاحقة .java من الأمر الثاني. الأمران نفسهما يعملان على Windows وعلى macOS؛ هذه الصفحة لا تحتاج إملاء صدفة مختلفًا لأي من النظامين. يجب أن يطبع البرنامج ثلاثة أسطر ويتوقف: 2، ثم 4، ثم 6. لا يطلب منك الكتابة. إذا بقي الطرفية منتظرة إدخال لوحة المفاتيح، فما زال استدعاء nextLine من تمرين أقدم داخل الملف. احذف ذلك الاستدعاء وأبقِ المصفوفة مع for-each أعلاه. لا تحتاج تثبيت JDK جديد من أجل سطر شاشة خاطئ.
امشِ تشغيلًا كاملًا بالترتيب. slots يحوي 2، ثم 4، ثم 6. الدورة الأولى تجعل n يساوي 2 وprintln يكتب 2. الدورة الثانية تجعل n يساوي 4 وتكتب 4. الدورة الثالثة تجعل n يساوي 6 وتكتب 6. ثم لا قيم أخرى، فتنتهي الحلقة. لم تكتب على هذه الصفحة int i = 0 أو i < slots.length. رأس for-each يطلب من Java زيارة كل قيمة مخزّنة مرة واحدة. الاسم n جديد في كل دورة فقط بمعنى أنه يحمل العنصر التالي؛ ما زلت تعلنه مرة واحدة في الرأس بصيغة int n.
امشِ مصفوفة String بنفس الطريقة
غيّر المصفوفة المحفوظة ونوع العنصر حتى تكون كل قيمة كلمة قصيرة:
String[] tags = {"red", "blue"};
for (String t : tags) {
System.out.println(t);
}
الآن يجب أن تظهر الشاشة سطرين: red، ثم blue. النقطتان ما زالتا بين نوع العنصر واسم المصفوفة. الجسم ما زال يطبع الاسم الذي يحمل عنصرًا واحدًا.
public class Pack {
public static void main(String[] args) {
String[] tags = {"red", "blue"};
for (String t : tags) {
System.out.println(t);
}
}
}
ترجم وشغّل مرة أخرى: javac Pack.java، ثم java Pack. يجب أن ترى سطرين. استبدلت مصفوفة int بمصفوفة String ووافقت نوع اسم العنصر مع String. بعد أن ترى red و blue يمكنك إعادة ديمو int. كلا النسختين Java صحيحة. تعلّمان نفس شكل for-each بأنواع عناصر مختلفة.
اقرأ تشغيل String مرة أخرى. tags يحوي red، ثم blue. الدورة الأولى تجعل t يساوي red وتطبعه. الدورة الثانية تجعل t يساوي blue وتطبعه. ثم تنتهي الحلقة. علامات الاقتباس في حرفي المصفوفة تعلّم النص المخزّن فيها. println(t) بلا اقتباس إضافي حول t يكتب تلك الحروف المخزّنة على الشاشة.
قواعد تُبقي for-each واضحًا
يجب أن تحفظ الأقواس النوع والاسم والنقطتين واسم المصفوفة بهذا الترتيب. كتابة for (int n slots) بلا نقطتين تجعل javac يفشل. يجب أن يناسب نوع العنصر المصفوفة: int مع مصفوفة int، و String مع مصفوفة String. وضع int n بجانب String[] ليس الشكل الذي يترجمه هذا الدرس. الأقواس المجعدة ما زالت تحفظ الجسم عندما يكون للجسم سطر واحد أو أكثر.
for-each ليس for العدّ من صفحة Beat، وليس break من صفحة Skip. الـ for العدّ كتب البداية والاختبار والخطوة بعدّاد. for-each يمشي قيمًا مخزّنة أصلًا في مصفوفة. break ينهي الحلقة مبكرًا؛ ديمو هذه الصفحة الأول يطبع كل قيمة. لا تُبقِ ديمو break من Skip أو while من Pulse في نفس main ثم تتعجب لماذا تظهر الشاشة 1 و 2 بدل 2 و 4 و 6. يجب أن يحفظ main هذه الجلسة المصفوفة و for-each فقط.
خلط شائع هو طباعة النحو نفسه: System.out.println("for (int n : slots)");. ذلك يكتب حروف الرأس. لا يمشي المصفوفة. خلط آخر هو System.out.println("n"); مع اقتباس، فيطبع الحرف n في كل دورة بدل 2 و 4 و 6. أبقِ println(n) بلا اقتباس عندما تريد قيمة العنصر على الشاشة.
إذا لم يكن للمصفوفة عناصر — مثلًا int[] slots = {}; — فالجسم لا يعمل أبدًا وتبقى الشاشة فارغة. ذلك ما زال for-each صحيحًا؛ ديموهات هذا الدرس تحتفظ بقيمتين على الأقل حتى ترى الأسطر المطبوعة. عندما تحتاج لاحقًا رقم فهرس على الشاشة يعود الـ for العدّ؛ for-each لزيارة القيم بلا إدارة ذلك الفهرس بنفسك. تغيير قيمة داخل الحلقة بـ n = 9; لا يعيد كتابة خانة المصفوفة على شكل المبتدئ هذا — عامل n قيمة تقرأها للطباعة، لا أداة لتحرير slots.
ماذا تستطيع أن تفعل الآن
تستطيع حفظ مصفوفة، وكتابة for (Type name : arrayName)، وطباعة كل قيمة مرة. موافقة نوع العنصر مع المصفوفة تُبقي الحلقة قابلة للترجمة. الصفحة التالية هي methods، حيث تجمع الأسطر تحت اسم تستطيع استدعاءه من main.
🧠 اختبر معرفتك
اختبر معرفتك
تحدى نفسك مع هذا الاختبار التفاعلي واكتشف مدى فهمك للموضوع
📝 التعليمات
- اقرأ كل سؤال بعناية
- اختر أفضل إجابة لكل سؤال
- يمكنك إعادة الاختبار عدة مرات كما تريد
- سيتم عرض تقدمك في الأعلى