ما هي حلقة لكل حلقة؟
تعد for-each نوعًا من حلقات for التي تستخدمها عندما تحتاج إلى معالجة جميع عناصر المصفوفة أو المجموعة. ومع ذلك، فإن عبارة for-each لم يتم استخدامها فعليًا في هذه الحلقة. بناء الجملة الخاص به هو كما يلي:for (type itVar : array)
{
// Operations
}
حيث type هو نوع متغير التكرار (الذي يطابق نوع بيانات العناصر في المصفوفة!)، itVar هو اسمه، والمصفوفة عبارة عن مصفوفة (يُسمح أيضًا ببنيات البيانات الأخرى، على سبيل المثال، نوع من المجموعات، مثل ArrayList )، أي الكائن الذي يتم تنفيذ الحلقة عليه. كما ترون، هذه البنية لا تستخدم عدادًا: فالمتغير المكرر يتكرر ببساطة على عناصر المصفوفة أو المجموعة. عند تنفيذ مثل هذه الحلقة، يتم تعيين قيمة كل عنصر من عناصر المصفوفة أو المجموعة لمتغير التكرار بشكل تسلسلي، وبعد ذلك يتم تنفيذ كتلة البيانات (أو العبارة) المحددة.
بالإضافة إلى حلقة for-each، تحتوي Java أيضًا على طريقة forEach(). يمكنك أن تقرأ عنها في مقال بعنوان "توقف عن كتابة الحلقات!" أفضل 10 ممارسات للعمل مع المجموعات في Java 8 |
for (int i=0; i < array.length; i++)
{
// Statements
}
مثال على لكل حلقة
نقوم بإنشاء مجموعة من درجات الطلاب. ثم نستخدم حلقة for-each لطباعة جميع التقديرات، وحساب متوسط الدرجات، والعثور على أعلى الدرجات.public class ForEachTest {
// A method that prints all scores
public static void printAllScores(int[] scores) {
System.out.print("|");
for (int num : scores) {
System.out.print(num + "|");
}
System.out.println();
}
// A method that displays the average score
public static double getAverageScore(int[] numbers) {
int totalScore = 0;
for (int num : numbers) {
totalScore = num + totalScore;
}
return ((double) totalScore / numbers.length);
}
// A method that determines the best (maximum) score
public static int getBestScore(int[] numbers) {
int maxScore = numbers[0];
for (int num : numbers) {
if (num > maxScore) {
maxScore = num;
}
}
return maxScore;
}
public static void main(String[] args) {
// Array of scores
int[] scores = {5, 10, 7, 8, 9, 9, 10, 12};
int bestScore = getBestScore(scores);
System.out.print("All the scores: ");
printAllScores(scores);
System.out.println("The highest score is " + bestScore);
System.out.println("The average score is " + getAverageScore(scores));
}
}
مخرجات البرنامج:
All the scores: |5|10|7|8|9|9|10|12|
The highest score is 12
The average score is 8.75
الآن، دعونا نرى كيف ستبدو طريقة طباعة جميع الدرجات إذا استخدمنا حلقة for عادية :
public static void printAllScores(int[] scores) {
System.out.print("|");
for (int i = 0; i < scores.length; i++) {
System.out.print(scores[i] + "|");
}
System.out.println();
}
إذا استدعينا هذه الطريقة من الطريقة الرئيسية نحصل على هذه النتيجة:
All the scores: |5|10|7|8|9|9|10|12|
مثال على حلقة for-each مع المجموعات
نقوم بإنشاء مجموعة من الأسماء وعرض جميع الأسماء على الشاشة.List<String> names = new ArrayList<>();
names.add("Snoopy");
names.add("Charlie");
names.add("Linus");
names.add("Shroeder");
names.add("Woodstock");
for(String name : names){
System.out.println(name);
}
حدود لكل حلقة
يعتبر الشكل المضغوط للحلقة for-each أسهل في القراءة من for - each ، ويعتبر من أفضل الممارسات استخدام حلقة for-each حيثما كان ذلك ممكنًا. ومع ذلك، فإن حلقة for-each هي بناء أقل عالمية من حلقة for العادية . فيما يلي بعض الحالات البسيطة التي لن تعمل فيها حلقة for-each على الإطلاق أو ستعمل، ولكن بصعوبة فقط.-
إذا كنت تريد تشغيل حلقة من النهاية إلى البداية. أي أنه لا توجد حلقة for-each تمثل تناظرًا مباشرًا للتعليمة البرمجية التالية:
for (int i= array.length-1; i>0; i--) { System.out.println(array[i]); }
-
For-each غير مناسب إذا كنت تريد إجراء تغييرات على مصفوفة. على سبيل المثال، لا يمكنك فرز مصفوفة دون تغيير موقع عناصرها. بالإضافة إلى ذلك، في التعليمة البرمجية التالية، سيتم تغيير متغير المكرر فقط، وليس عنصر المصفوفة:
for (int itVar : array) { itVar = itVar++; }
-
إذا كنت تبحث عن عنصر في مصفوفة وتحتاج إلى إرجاع (أو تمرير) فهرس العنصر الذي تبحث عنه، فمن الأفضل استخدام حلقة for عادية .
فيديو مفيد عن حلقة for-each
حلقات في دورة CodeGymفي CodeGym، نبدأ في التدرب على استخدام الحلقات في المستوى 4 من مهمة Java Syntax . تم تخصيص العديد من الدروس في هذا المستوى، بالإضافة إلى العديد من المهام في مختلف المستويات، للحلقات من أجل تعزيز مهاراتك في العمل معها. في الأساس، لا توجد طريقة يمكنك الهروب منها — الحلقات هي واحدة من أهم البنيات في البرمجة. |
مزيد من المعلومات حول حلقات for-each والحلقات الأخرى
- بيان حين
. تتناول هذه المقالة أبسط أنواع الحلقات: الحلقة
while
، والتي يستخدمها CodeGym لتقديم الحلقات للطلاب. - التوقف عن كتابة الحلقات! أفضل 10 ممارسات للعمل مع المجموعات في Java 8 ستساعد هذه المقالة طلاب CodeGym الذين هم على الأقل في منتصف الدورة التدريبية على تعلم العديد من الأشياء المثيرة للاهتمام حول العمل مع المجموعات.
GO TO FULL VERSION