تفاوت for و foreach در جاوا اسکریپت چیست؟

فهرست مطالب این نوشته
Toggleدرک بهتر تفاوت for و foreach در جاوا اسکریپت – حلقههای تکرار یکی از ابزارهای اصلی در برنامهنویسی برای انجام عملیاتهای تکراری هستند. در جاوا اسکریپت، حلقههای مختلفی وجود دارند که هرکدام کاربردهای خاص خود را دارند. دو نوع حلقه مهم for و forEach هستند که بهترتیب برای تکرار روی دادههای مختلف و تکرار روی آرایهها بهکار میروند. حلقه for یک ساختار کنترلی است که به شما اجازه میدهد تا بهصورت صریح، شرایط شروع، پایان و گامهای تکرار را تعریف کنید.

در مقابل، foreach یک متد از آرایهها و مجموعهها است که به شما امکان میدهد تا بهصورت ساده و خوانا، بر روی هر عنصر مجموعه تکرار کنید.
براساس یک مطالعه انجام شده در سال 2021، استفاده از foreach میتواند خوانایی کد را تا 30٪ بهبود بخشد، چرا که نیاز به نوشتن کدهای اضافه برای مدیریت شاخصها و شرایط وجود ندارد.
در این مطلب تفاوت for و foreach در جاوا اسکریپت را بررسی میکنیم.
حلقه for چیست؟
حلقه for یک ساختار حلقه عمومی در بسیاری از زبانهای برنامهنویسی است که انعطافپذیری زیادی دارد و میتواند برای تکرار روی آرایهها یا انجام کارهای دیگری استفاده شود.
ساختار کلی حلقه for:
for (initialization; condition; increment) {
// Code to be executed
}
مثال:
فرض کنیم یک آرایه از اعداد داریم و میخواهیم هر کدام را در کنسول چاپ کنیم:
let numbers = [1, 2, 3, 4, 5];
for (let i = 0; i < numbers.length; i++) {
console.log(numbers[i]);
}
در این مثال:
- initialization (مقداردهی اولیه): let i = 0، متغیر شمارنده i از صفر شروع میشود.
- condition (شرط): i < numbers.length، حلقه تا زمانی که i کمتر از طول آرایه باشد ادامه پیدا میکند.
- increment (افزایش): i++، بعد از هر بار اجرای کد درون حلقه، i یکی افزایش مییابد.
حلقه Foreach چیست؟
forEach یک متد مخصوص آرایهها در جاوا اسکریپت است که برای اجرای یک تابع روی هر عنصر آرایه استفاده میشود. این متد سینتکس سادهتری دارد و اغلب برای خوانایی کد مناسبتر است.
ساختار کلی حلقه forEach:
array.forEach(function(element, index, array) {
// Code to be executed
});
مثال:
مثال قبلی را با استفاده از forEach بازنویسی میکنیم:
let numbers = [1, 2, 3, 4, 5];
numbers.forEach(function(number) {
console.log(number);
});
در این مثال:
- function(number) یک تابع بدون نام است که هر عنصر آرایه را بهعنوان ورودی میگیرد و در کنسول چاپ میکند.
- forEach بهصورت خودکار روی هر عنصر آرایه تکرار میکند و نیازی به متغیر شمارنده ندارد.
تفاوت for و foreach در جاوا اسکریپت
در جاوا اسکریپت، حلقههای for و forEach هر دو برای تکرار و پردازش عناصر در یک آرایه یا مجموعهای از دادهها استفاده میشوند، اما تفاوتهای کلیدی بین آنها وجود دارد که درک آنها مهم است. در ادامه، این تفاوتها را بههمراه مثالها و مزایا و کاربردهای هر کدام توضیح میدهیم. در جاوا اسکریپت، هر دو دستور for و forEach برای تکرار (iterate) روی مجموعهای از دادهها مانند آرایهها استفاده میشوند، اما تفاوتهایی در نحوه استفاده و عملکرد دارند. در اینجا، تفاوتهای اصلی بین for و forEach در جاوا اسکریپت آورده شده است:
1. سینتکس و نحوه استفاده
- for loop: ساختار سنتی و عمومی برای تکرار است که در آن خودتان باید مقادیر مختلف مانند مقدار شروع، شرط ادامه و نحوه افزایش شمارنده را تعریف کنید.
const numbers = [1, 2, 3, 4, 5];
for (let i = 0; i < numbers.length; i++) {
console.log(numbers[i]);
}
- در این روش، شما خودتان باید i را مدیریت کنید و به طور دستی شرط ادامهی حلقه و افزایش i را مشخص کنید.
- forEach method: یک متد برای آرایهها است که برای تکرار ساده و بدون نیاز به مدیریت شمارنده استفاده میشود. در این روش، نیازی به تعریف شمارنده یا شرایط تکرار نیست. forEach هر المان آرایه را به ترتیب به یک تابع ارسال میکند.
const numbers = [1, 2, 3, 4, 5];
numbers.forEach(function(number) {
console.log(number);
});
یا استفاده از Arrow Function:
numbers.forEach(number => console.log(number));
2. بازگشت و توقف حلقه
- for loop: در حلقه for میتوانید از دستورات break و continue برای توقف یا پرش به تکرار بعدی استفاده کنید.
for (let i = 0; i < numbers.length; i++) {
if (numbers[i] === 3) {
break; // حلقه پس از رسیدن به 3 متوقف میشود
}
console.log(numbers[i]);
}
- forEach method: در forEach نمیتوانید از break یا continue استفاده کنید. برای توقف تکرار باید از return یا ساختارهای دیگر استفاده کنید.
numbers.forEach(number => {
if (number === 3) {
return; // توقف تکرار فعلی
}
console.log(number);
});
به طور کلی، forEach نمیتواند مانند for به طور کامل حلقه را متوقف کند، اما میتوان از return برای جلوگیری از انجام عمل در تکرار خاص استفاده کرد.
3. عملکرد و کارایی
- for loop: حلقههای for به طور کلی سریعتر و کاراتر از forEach هستند، به ویژه زمانی که نیاز به انجام عملیاتهای پیچیده در هر تکرار دارید. در حلقه for میتوانید به طور مستقیم به ایندکسها و آرایهها دسترسی داشته باشید.
- forEach method : forEach به دلیل اینکه برای هر عنصر یک تابع فراخوانی میکند، کمی کندتر از حلقه for است، به ویژه در مجموعههای بزرگ.
4. قابلیت تغییر آرایه در حین تکرار
- for loop: در حلقه for، میتوانید آرایه را حین تکرار تغییر دهید، اضافه یا حذف کنید، بدون اینکه مشکلی پیش بیاید.
for (let i = 0; i < numbers.length; i++) {
if (numbers[i] === 3) {
numbers.splice(i, 1); // حذف عنصر 3
}
}
- forEach method: در forEach، نمیتوانید مستقیماً عناصر آرایه را حذف کنید زیرا به صورت غیر همزمان عمل میکند و تغییرات اعمال شده در حین تکرار تأثیرگذار نخواهند بود
numbers.forEach((number, index) => {
if (number === 3) {
numbers.splice(index, 1); // این تغییر ممکن است رفتار غیرمنتظرهای ایجاد کند
}
});
5. دسترسی به ایندکس و آرایه اصلی
- forEach method : forEach به طور خودکار هر عنصر، ایندکس آن و خود آرایه را به تابع باز میفرستد.
numbers.forEach((number, index, array) => {
console.log(index, number, array);
});
- for loop: در حلقه for شما باید ایندکس را خودتان مدیریت کنید.
for (let i = 0; i < numbers.length; i++) {
console.log(i, numbers[i]);
}
دیگر تفاوتها و مزایا
در این بخش میخواهیم دیگر تفاوتها و مزایای for و For each در جاوا را بررسی کنیم.
تفاوت for و foreach در جاوا اسکریپت از نظر خوانایی و سادگی:
- forEach کد خواناتر و سادهتری دارد، بهویژه برای کارهای ساده مانند چاپ عناصر آرایه. نیازی به مدیریت متغیر شمارنده ندارد.
- for انعطافپذیری بیشتری دارد و برای موارد پیچیدهتر یا نیاز به کنترل دقیقتر تکرار مناسبتر است.
تفاوت for و foreach در جاوا اسکریپت از نظر کار با ایندکسها:
- forEach بهطور پیشفرض ایندکس را مدیریت نمیکند، اما میتوان آنرا بهعنوان پارامتر دوم در تابع کالبک دریافت کرد.
- for مدیریت ایندکسها و کنترل دقیقتر روی شرایط تکرار آسانتر است.
تفاوت for و foreach در جاوا اسکریپت از نظر کنترل تکرار:
- forEach امکان استفاده از break یا continue برای کنترل حلقه وجود ندارد.
- For استفاده از break و continue برای کنترل حلقه مجاز است.
تفاوت for و foreach در جاوا اسکریپت از نظر استفادههای دیگر
- forEach بهدلیل اینکه مخصوص آرایهها است، فقط برای آرایهها استفاده میشود.
- for میتواند برای انواع دادههای دیگر مانند اشیاء، رشتهها و حتی مقادیر عددی استفاده شود.
یکی از نقاط قوت دورههای آموزشی آکادمی چابک، بهرهگیری از اساتید و مدرسین با تجربه و حرفهای است. این افراد نه تنها دانش نظری بلکه تجربه عملی گستردهای در زمینههای تخصصی خود دارند و میتوانند مفاهیم را به شکلی کاربردی و موثر به فراگیران منتقل کنند. برای یادگیری زبان برنامهنویسی جاوا اسکریپت، با ما تماس بگیرید.
کاربردهای هر کدام
اکنون میخواهیم به سراغ کاربرد forEach in js و for in js برسیم.
- forEach: برای کارهای ساده و زمانی که نیاز به تکرار بر روی هر عنصر آرایه داریم، میتوانیم از این حلقه استفاده کنیم. بدون نیاز به کنترل دقیق تکرار. مانند چاپ عناصر، تغییر مقادیر، انجام عملیاتهای مشابه روی هر عنصر.
- for: مناسب برای کارهای پیچیدهتر، زمانی که نیاز به کنترل دقیق روی متغیر شمارنده، شرایط تکرار و یا استفاده از حلقه در مواردی بهجز آرایهها داریم. مثل حلقههای تو در تو، عملیاتهای پیچیدهتر، یا وقتی که نیاز به استفاده از break و continue داریم.
مثالهای پیشرفته برای درک بهتر تفاوت for و foreach در جاوا اسکریپت
در برخی موارد، امکان دارد نیاز داشته باشیم از هر دو نوع حلقه بهطور ترکیبی استفاده کنیم. برای مثال، میتوانیم از حلقه for برای تکرار روی یک آرایه دوبعدی و از forEach برای پردازش هر عنصر آن استفاده کنیم.
فرض کنید یک آرایه دوبعدی داریم که نمایانگر ماتریسی از اعداد است و میخواهیم جمع هر ردیف را محاسبه و در یک آرایه جدید ذخیره کنیم:
let matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
];
let rowSums = [];
for (let i = 0; i < matrix.length; i++) {
let sum = 0;
matrix[i].forEach(function(number) {
sum += number;
});
rowSums.push(sum);
}
console.log(rowSums); // Output: [6, 15, 24]
در این مثال، از حلقه for برای تکرار روی ردیفهای ماتریس استفاده شده و در هر ردیف، از forEach برای محاسبه جمع عناصر آن ردیف استفاده میکنیم.
سخن پایانی
استفاده از for loop بیشتر برای زمانهایی مناسب است که نیاز به کنترل دقیقتری روی ایندکسها و یا شرایط توقف (break) دارید.
forEach روش سادهتری است که میتواند برای تکرار سریع و بدون نیاز به مدیریت ایندکسها و شرایط پیچیده مورد استفاده قرار گیرد، اما در برخی موارد میتواند کارایی کمتری داشته باشد.
انتخاب کردن از بین حلقههای for و forEach به نیازهای پروژه و شرایط مختلف بستگی دارد. حلقه for انعطافپذیری و کنترل بیشتری فراهم میکند و برای تکرارهای پیچیده و کنترل دقیق جریان مناسب است. از طرف دیگر، forEach سادهتر و خواناتر است و برای تکرارهای مستقیم و ساده روی آرایهها خیلی خوب عمل میکند.
آکادمی چابک دورههای متنوعی را در حوزههای مختلف مثل برنامهنویسی، کسبوکار و … ارائه میدهد. این دورهها بهگونهای طراحی شدهاند که هم برای مبتدیان و هم برای حرفهایها مناسب باشند. برای دریافت اطلاعات بیشتر از دورهها، هماکنون با ما تماس بگیرید.
منابع
دیدگاهتان را بنویسید