در بعضی از مواقع نیاز داریم عملیات های مشابه را چندین بار تکرار کنیم. برای مثال زمانی که میخواهیم کالاها را یکی پس از دیگری لیست کنیم. در این مواقع از حلقه ها کمک خواهیم گرفت. در این فصل با حلقه ی for در زبان جاوا اسکریپت آشنا خواهید شد.
حلقه for
یکی از پر استفاده ترین حلقه ها در زبان جاوا اسکریپت حلقه for است. قاعده ی نوشتاری این حلقه عبارت است از :
for (begin; condition; step) {
// ... loop body ...
}
در نمونه مثال زیر ، حلقه for دستور (alert(i را برای متغیر i از صفر تا ۳ (نه خود مقدار ۳) اجرا می کند :
for (let i = 0; i < 3; i++) { // shows 0, then 1, then 2
alert(i);
}
در زیر قسمت های مختلف حلقه for را بررسی می کنیم :
- Begin : دستور i = 0 یکبار و آن هم در اولین ورود به حلقه for اجرا میشود.
- Condition : شرط i < 3 قبل از هر تکراری از حلقه بررسی می شود. در صورتی که ناصحیح باشد اجرای حلقه خاتمه می یابد.
- Step : دستور ++i بعد از اجرای بدنه حلقه در هر تکرار اجرا میشود و مقدار شمارنده حلقه را افزایش می دهد. این امر قبل از ارزیابی شرط برای تکرار بعدی صورت می گیرد.
- Body : دستور (alert(i مادامی که شرط حلقه صحیح باشد اجرا میشود.
میتوان نحوه عملکرد حلقه for را به شکل زیر نشان داد :
Run begin
→ (if condition → run body and run step)
→ (if condition → run body and run step)
→ (if condition → run body and run step)
→ ...
در مورد مثال ذکر شده در قسمت قبل اتفاقی که روی میدهد به شکل زیر است :
// for (let i = 0; i < 3; i++) alert(i)
// run begin
let i = 0
// if condition → run body and run step
if (i < 3) { alert(i); i++ }
// if condition → run body and run step
if (i < 3) { alert(i); i++ }
// if condition → run body and run step
if (i < 3) { alert(i); i++ }
// ...finish, because now i == 3
تعریف متغیر در داخل حلقه for
شمارنده ی حلقه for یعنی متغیر i ، در خود حلقه تعریف میشود. چنین متغیری فقط در خود حلقه قابل استفاده است :
for (let i = 0; i < 3; i++) {
alert(i); // 0, 1, 2
}
alert(i); // error, no such variable
می توان متغیر i را در خارج از حلقه تعریف کرد. در این صورت می توان به آن در خارج از حلقه نیز دسترسی داشت :
let i = 0;
for (i = 0; i < 3; i++) { // use an existing variable
alert(i); // 0, 1, 2
}
alert(i); // 3, visible, because declared outside of the loop
نادیده گرفتن قسمت های مختلف حلقه
هر قسمت از حلقه for را می توان نادیده گرفت و از نوشتن آن صرف نظر کرد. برای مثال می توان قسمت آغازین (begin) حلقه for را نادیده گرفت. در این صورت باید از قبل متغیر را تعریف و مقداردهی کرده باشید :
let i = 0; // we have i already declared and assigned
for (; i < 3; i++) { // no need for "begin"
alert( i ); // 0, 1, 2
}
میتوان step را از حلقه حذف کرد در این صورت عمل افزایش باید داخل بدنه ی حلقه انجام شود. در غیر این صورت با یک حلقه بی نهایت روبرو خواهیم بود :
let i = 0;
for (; i < 3;) {
alert( i++ );
}
مثال بالا معادل حلقه (while (i < 3 است.
می توان همه قسمت های موجود در حلقه را حذف کرد در این صورت یک حلقه بی نهایت ایجاد میشود :
for (;;) {
// repeats without limits
}
دقت داشته باشید که هر دو سمی کالن (;) باید همچنان نوشته شوند، در غیر این صورت با خطا روبرو خواهیم شد.
شکستن حلقه و خروج از آن با استفاده از دستور break
به صورت عادی حلقه تا زمانی که شرط آن صحیح باشد به تکرار ادامه میدهد اما میتوان در هر لحظه که بخواهیم از حلقه خارج شویم. برای این کار می توان از کلمه رزرو شده break استفاده کرد. برای مثال حلقه زیر از کاربر می خواهد که مجموعه ای از اعداد را وارد کند اما زمانی که کاربر مقدار خالی (" ") را وارد کند و یا عملیات را لغو کند خروج از حلقه توسط دستور break انجام می شود :
let sum = 0;
while (true) {
let value = +prompt("Enter a number", '');
if (!value) break; // (*)
sum += value;
}
alert( 'Sum: ' + sum );
رفتن به تکرار بعدی حلقه با استفاده از دستور continue
دستور continue نسخه ای خفیف تر از break است. این دستور حلقه را متوقف نمیکند ، درعوض تکرار فعلی حلقه را متوقف کرده و حلقه را مجبور به شروع یک تکرار جدید میکند(در صورتی که شرط همچنان صحیح ارزیابی شود).
در حلقه زیر از دستور continue برای ایجاد خروجی اعداد فرد استفاده می شود :
for (let i = 0; i < 10; i++) {
// if true, skip the remaining part of the body
if (i % 2 == 0) continue;
alert(i); // 1, then 3, 5, 7, 9
}
برای مقادیر زوج از متغیر i دستور continue اجرای بدنه حلقه را متوقف و تکرار بعدی را آغاز میکند.