حلقهی For-Each سازوکاری برای اجرای یک بلوک کد برای هر عنصر در یک مجموعه فراهم میکند. برخی مستندات (مثلاً مستندات Oracle) به اینها حلقهی For ارتقایافته میگویند.
نحوهی نگارش کلی چنین است:
for(declaration: collection) {
body;
}
declaration متغیری را تعریف میکند که مقادیر تخصیصیافته از مجموعه را در خود نگه میدارد.
collection یک آرایه یا مجموعهای است که مقادیری را نگه میدارد؛ این مقادیر به متغیر حلقه تخصیص داده میشوند.
body شامل دستورهایی است که برای هر مقدار در مجموعه یک بار اجرا میشوند.
برای مثال:
char[] vowels = {'a', 'e', 'i', 'o', 'u'};
for(char vowel: vowels) {
System.out.println(vowel);
}
که خروجی زیر را میدهد:
a
e
i
o
u
بهطور کلی، حلقهی for-each به دلایل زیر بر حلقهی for ترجیح دارد:
for-each تضمین میکند که روی همهی مقادیر پیمایش شود.for-each اعلامیتر است، یعنی کد بیان میکند چه کاری انجام میدهد، نه چگونه آن را انجام میدهد.for-each خطاناپذیر است، در حالی که در حلقههای for بهراحتی ممکن است خطای یکواحدی رخ دهد (به استفاده از < در برابر <= فکر کنید).for-each روی همهی انواع مجموعه کار میکند، از جمله مجموعههایی که دسترسی به عنصرها با ایندکس را پشتیبانی نمیکنند (مثلاً Set).