آموزش حلقه foreach در جاوا
حلقه foreach در جاوا برای تکرار روی تمام عناصر آرایه، لیست یا مجموعه به کار میرود و کد را خواناتر از حلقه معمولی میکند.
17 اردیبهشت 1405
لینک کوتاه
آموزش حلقه foreach در جاوا
در زبان برنامهنویسی جاوا، پیمایش آرایهها و مجموعهها یکی از کارهایی است که برنامهنویسان هر روز با آن سروکار دارند.حلقههای for معمولی اگرچه قدرتمند هستند، اما گاهی کدنویسی را طولانی و پیچیده میکنند.
اینجا جایی است که حلقه foreach وارد میشود.
این حلقه که در واقع نسخه سادهشده و خواناتر حلقه for است، به شما اجازه میدهد بدون نگرانی از اندیس و شمارنده، به تمام عناصر یک آرایه یا مجموعه دسترسی پیدا کنید.
حلقه foreach در جاوا چیست؟
حلقه foreach در جاوا که با نام حلقه for-enhanced یا حلقه for پیشرفته نیز شناخته میشود، یک ساختار کنترلی است که برای پیمایش ساده و خوانا عناصر یک آرایه یا مجموعه (مانند ArrayList، HashSet و غیره) طراحی شده است.این حلقه به طور خودکار عناصر را یکی یکی به یک متغیر موقت اختصاص میدهد و نیازی به مدیریت اندیس یا شمارنده ندارد.
نکته مهم: در جاوا، کلمه کلیدی مستقیمی به نام foreach وجود ندارد. بلکه این یک سینتکس خاص از حلقه for است که با دو نقطه : نوشته میشود.
ساختار کلی حلقه foreach در جاوا
for (نوع داده نام_متغیر : آرایه_یا_مجموعه) {
// دستوراتی که روی هر عنصر اجرا میشود
}
مثال ساده:
int[] numbers = {10, 20, 30, 40, 50};
for (int num : numbers) {
System.out.println("عدد: " + num);
}
خروجی:
عدد: 10
عدد: 20
عدد: 30
عدد: 40
عدد: 50
در این مثال، حلقه foreach هر بار یک عنصر از آرایه numbers را برمیدارد، آن را در متغیر num قرار میدهد و بدنه حلقه را اجرا میکند.
این کار تا آخرین عنصر آرایه ادامه مییابد.
🚀 از صفر تا قهرمان جاوا، فقط با یک دوره!
به دنبال یه فرصت طلایی برای شروع برنامهنویسی میگردی؟
دوره آموزشی جاوا ما، همون چیزیه که نیاز داری!✨ چرا این دوره رو انتخاب میکنی؟
🎯 از مبتدی تا حرفهای
بدون پیشزمینه شروع میکنی و به یه برنامهنویس جاوا تبدیل میشی که بازار کار منتظرته!🛠 پروژهمحور و عملی
با انجام پروژههای واقعی، کدنویسی رو یاد میگیری، نه فقط تئوری!👨🏫 پشتیبانی همیشگی
هرجا گیر کنی، تیم پشتیبانی کنارته تا مشکلت حل بشه.🔓 دسترسی مادامالعمر
هر وقت خواستی به محتوا دسترسی داری، برای همیشه!
نحوه استفاده از foreach در جاوا
حالا که با مفهوم کلی آشنا شدید، بیایید نحوه استفاده عملی از foreach را در موقعیتهای مختلف یاد بگیریم.-
استفاده از foreach برای آرایههای یک بعدی
سادهترین و رایجترین کاربرد foreach، پیمایش آرایههای یک بعدی است.
public class ForEachArrayExample {
public static void main(String[] args) {
// آرایه از رشتهها
String[] names = {"علی", "رضا", "سارا", "مریم", "زهرا"};
System.out.println("لیست اسامی:");
for (String name : names) {
System.out.println("نام: " + name);
}
}
}
-
استفاده از foreach برای آرایههای دو بعدی
برای آرایههای دو بعدی، میتوانید از دو حلقه foreach تو در تو استفاده کنید.
public class ForEach2DArray {
public static void main(String[] args) {
int[][] matrix = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
System.out.println("مقادیر ماتریس:");
for (int[] row : matrix) { // پیمایش سطرها
for (int value : row) { // پیمایش ستونهای هر سطر
System.out.print(value + " ");
}
System.out.println(); // رفتن به خط بعدی
}
}
}
خروجی:
مقادیر ماتریس:
1 2 3
4 5 6
7 8 9
-
استفاده از foreach برای ArrayList
یکی از قدرتمندترین کاربردهای foreach، پیمایش مجموعههای Collection مانند ArrayList است.
import java.util.ArrayList;
public class ForEachArrayList {
public static void main(String[] args) {
ArrayList<String> fruits = new ArrayList<>();
fruits.add("سیب");
fruits.add("پرتقال");
fruits.add("موز");
fruits.add("انگور");
System.out.println("میوهها:");
for (String fruit : fruits) {
System.out.println("- " + fruit);
}
}
}
-
استفاده از foreach برای HashSet
import java.util.HashSet;
public class ForEachHashSet {
public static void main(String[] args) {
HashSet<Integer> scores = new HashSet<>();
scores.add(18);
scores.add(19);
scores.add(20);
scores.add(17);
System.out.println("نمرات منحصربهفرد:");
for (int score : scores) {
System.out.println("نمره: " + score);
}
}
}

مثال عملی foreach در جاوا
بیایید با مثالهای واقعی و کاربردی، قدرت foreach را بهتر درک کنیم.مثال ۱: محاسبه میانگین نمرات با foreach
public class AverageWithForEach {
public static void main(String[] args) {
int[] scores = {18, 19, 20, 17, 16, 20, 15};
int sum = 0;
// پیمایش و جمع زدن نمرات
for (int score : scores) {
sum = sum + score;
}
double average = (double) sum / scores.length;
System.out.println("مجموع نمرات: " + sum);
System.out.println("میانگین نمرات: " + average);
}
}
مثال ۲: پیدا کردن بزرگترین عدد در آرایه با foreach
public class MaxWithForEach {
public static void main(String[] args) {
int[] numbers = {23, 45, 12, 78, 34, 89, 56};
int max = numbers[0]; // فرض کنیم اولی بزرگترین است
for (int num : numbers) {
if (num > max) {
max = num;
}
}
System.out.println("بزرگترین عدد: " + max);
}
}
مثال ۳: نمایش محصولات یک فروشگاه با foreach
class Product {
String name;
int price;
Product(String name, int price) {
this.name = name;
this.price = price;
}
}
public class ShopWithForEach {
public static void main(String[] args) {
Product[] products = {
new Product("تیشرت", 150000),
new Product("شلوار جین", 350000),
new Product("کتانی", 280000),
new Product("کلاه", 80000)
};
System.out.println("لیست محصولات:");
for (Product p : products) {
System.out.println("نام: " + p.name + " | قیمت: " + p.price + " تومان");
}
}
}
مثال ۴: فیلتر کردن عناصر با شرط در foreach
public class FilterWithForEach {
public static void main(String[] args) {
int[] ages = {12, 18, 22, 15, 30, 17, 25, 14};
System.out.println("افراد بالای ۱۸ سال:");
for (int age : ages) {
if (age >= 18) {
System.out.println("سن: " + age);
}
}
}
}
مثال ۵: کار با رشتهها در foreach
public class StringWithForEach {
public static void main(String[] args) {
String[] sentences = {
"جاوا زبان برنامهنویسی قدرتمندی است",
"حلقه foreach کدنویسی را ساده میکند",
"آموزش تمرین میخواهد"
};
for (String sentence : sentences) {
System.out.println("طول جمله: " + sentence.length() + " کاراکتر");
System.out.println("جمله: " + sentence);
System.out.println("---");
}
}
}
تفاوت for و foreach در جاوا
درک تفاوت بین حلقه for معمولی و حلقه foreach برای انتخاب درست در کدنویسی بسیار مهم است.| ویژگی | حلقه for معمولی | حلقه foreach |
| ساختار | for (int x : arr) | for (int i=0; i<arr.length; i++) |
| دسترسی به اندیس | دارد (با استفاده از i) | ندارد |
| تغییر مقدار عناصر | میتواند (arr[i] = value) | نمیتواند (فقط خواندنی) |
| پیمایش معکوس | امکانپذیر است | امکانپذیر نیست |
| پیمایش پلهپله | امکانپذیر (مثلاً i+=2) | امکانپذیر نیست |
| خوانایی کد | کمتر (در پیمایش ساده) | بیشتر (تمیزتر و کوتاهتر) |
| سرعت اجرا | تقریباً برابر | تقریباً برابر |
| مناسب برای | نیاز به اندیس، تغییر wartości، پیمایش غیرخطی | پیمایش ساده و فقط خواندنی |
مثال مقایسه عملی
پیمایش با for معمولی
int[] numbers = {5, 10, 15, 20};
for (int i = 0; i < numbers.length; i++) {
System.out.println("اندیس " + i + ": " + numbers[i]);
}
پیمایش با foreach
int[] numbers = {5, 10, 15, 20};
for (int num : numbers) {
System.out.println("مقدار: " + num);
// دسترسی به اندیس وجود ندارد
}
چه زمانی از foreach استفاده کنیم؟
✅ از foreach استفاده کنید وقتی که:
- فقط میخواهید عناصر را بخوانید و نمایش دهید
- به اندیس عناصر نیازی ندارید
- میخواهید کد تمیزتر و خواناتر باشد
- در حال پیمایش همه عناصر از اول تا آخر هستید
چه زمانی از for معمولی استفاده کنیم؟
✅ از for معمولی استفاده کنید وقتی که:
- نیاز به تغییر مقدار عناصر دارید
- به اندیس عناصر نیاز دارید
- میخواهید آرایه را به صورت معکوس پیمایش کنید
- میخواهید پلهپله پیمایش کنید (مثلاً هر ۲ تا یکی)
- میخواهید در میانه راه پیمایش را متوقف کنید (با قید شرط پیچیده)
کاربرد foreach در آرایههای جاوا
بیایید نگاهی عمیقتر به کاربردهای مختلف foreach در آرایههای جاوا بیندازیم.۱. پیمایش آرایه از نوع Object
public class ObjectArrayForEach {
public static void main(String[] args) {
Integer[] numbers = {10, 20, 30, 40, 50};
for (Integer num : numbers) {
System.out.println("عدد × 2 = " + (num * 2));
}
}
}
۲. پیمایش آرایه char
public class CharArrayForEach {
public static void main(String[] args) {
char[] letters = {'J', 'a', 'v', 'a'};
for (char c : letters) {
System.out.print(c);
}
// خروجی: Java
}
}
۳. پیمایش آرایه boolean
public class BooleanArrayForEach {
public static void main(String[] args) {
boolean[] flags = {true, false, true, true, false};
int trueCount = 0;
for (boolean flag : flags) {
if (flag) {
trueCount++;
}
}
System.out.println("تعداد trueها: " + trueCount);
}
}
۴. پیمایش بخشی از آرایه (محدودیت foreach)
نکته مهم: foreach همیشه همه عناصر را از اول تا آخر پیمایش میکند. اگر بخواهید فقط بخشی از آرایه را پیمایش کنید، باید از for معمولی استفاده کنید.int[] numbers = {10, 20, 30, 40, 50, 60, 70};
// این کار با foreach شدنی نیست
// فقط از اندیس ۲ تا ۵ (۳۰ تا ۶۰)
for (int i = 2; i <= 5; i++) {
System.out.println(numbers[i]);
}

محدودیتهای حلقه foreach
با وجود سادگی و خوانایی بالا، foreach محدودیتهایی دارد که باید بدانید:محدودیت ۱: عدم امکان تغییر عناصر
در حلقه foreach، متغیر حلقه یک کپی از عنصر است، نه ارجاع مستقیم به آن. بنابراین تغییر آن روی آرایه اصلی تأثیری ندارد.int[] numbers = {1, 2, 3, 4, 5};
// این کار آرایه را تغییر نمیدهد!
for (int num : numbers) {
num = num * 2; // فقط متغیر num تغییر میکند
}
// نتیجه: آرایه همچنان {1, 2, 3, 4, 5} است
محدودیت ۲: عدم دسترسی به اندیس جاری
اگر نیاز به اندیس عنصر دارید (مثلاً برای مقایسه با عنصر بعدی)، foreach به کار شما نمیآید.محدودیت ۳: عدم امکان پیمایش معکوس
foreach فقط از اول به آخر پیمایش میکند. برای پیمایش معکوس باید از for معمولی استفاده کنید.محدودیت ۴: عدم امکان حذف عناصر در حین پیمایش
اگر در حال پیمایش یک مجموعه (مثل ArrayList) هستید و میخواهید عنصری را حذف کنید، foreach ممکن است خطای ConcurrentModificationException بدهد.نکات پیشرفته و بهینهسازی
نکته ۱: استفاده از foreach با نوع داده مناسب
همیشه نوع داده متغیر حلقه را دقیقاً برابر با نوع عناصر آرایه انتخاب کنید.// درست
int[] numbers = {1, 2, 3};
for (int num : numbers) { }
// غلط (اتفاقی اما کد را گیجکننده میکند)
for (long num : numbers) { } // کار میکند اما توصیه نمیشود
نکته ۲: foreach با آرایههای null
اگر آرایه null باشد، foreach خطای NullPointerException میدهد. همیشه قبل از پیمایش، نال نبودن آرایه را بررسی کنید.int[] numbers = null;
// این خطا میدهد
// for (int num : numbers) { }
// راه حل: بررسی null
if (numbers != null) {
for (int num : numbers) {
System.out.println(num);
}
}
نکته ۳: foreach نسبت به for معمولی سریعتر است؟
در بیشتر موارد، سرعت اجرای foreach و for معمولی تقریباً برابر است.اما در برخی مجموعههای خاص (مثل LinkedList)، foreach ممکن است کمی سریعتر باشد.
با این حال، تفاوت آنقدر ناچیز است که نباید نگران باشید. اولویت را به خوانایی کد بدهید.
جمعبندی
حلقه foreach در جاوا یک ابزار ساده، خوانا و کارآمد برای پیمایش آرایهها و مجموعهها است.اگر فقط میخواهید عناصر را بخوانید و نمایش دهید، foreach بهترین انتخاب است.
اما اگر نیاز به اندیس، تغییر مقادیر یا پیمایش غیرخطی دارید، باید از حلقه for معمولی استفاده کنید.
موارد مهم:
- حلقه foreach با استفاده از سینتکس for (type var : array) نوشته میشود.
- این حلقه فقط برای خواندن عناصر مناسب است، نه تغییر آنها.
- دسترسی به اندیس عناصر در foreach وجود ندارد.
- foreach همه عناصر را از اول تا آخر پیمایش میکند.
- اگر آرایه null باشد، foreach خطا میدهد.
- برای پیمایش مجموعههایی مانند ArrayList و HashSet نیز میتوان از foreach استفاده کرد.
تسلط بر حلقه foreach به شما کمک میکند کدهای تمیزتر، کوتاهتر و خواناتری بنویسید. از همین امروز در پروژههای خود از این حلقه کاربردی استفاده کنید.


کاربران ما
شما هم نظرتون با ما دریاره “آموزش حلقه foreach در جاوا” اشتراک بزارید
برای ارسال نظر لطفا ورود یا ثبت نام کنید