حلقهٔ while
در حلقهٔ for سه تکهٔ شروع و شرط و بهروزرسانی یکجا در سرِ حلقه نشسته بودند. گاهی فقط این را میدانید: «تا وقتی این درست است ادامه بده» — و خودِ شمارنده وسط کار عوض میشود. while اول شرط را میبیند، بدنه را اجرا میکند، دوباره شرط را چک میکند. همان تکرار کار است؛ شکل نوشتن فرق دارد.
حلقهٔ while چطور جلو میرود؟
تا وقتی عبارت داخل پرانتز درست باشد، بلوک { } دوباره اجرا میشود. در سرِ حلقه جای جدا برای شروع یا بهروزرسانی نیست. متغیرها را قبل از حلقه آماده میکنید و داخل بدنه عوضشان میکنید تا بالاخره شرط غلط شود. شرط که غلط شد، حلقه تمام است و برنامه از خط بعد ادامه میدهد.
while و for و do...while در یک نگاه
📊 شکلهای روزمرهٔ حلقه
| شکل | کی جور است | چک شرط |
|---|---|---|
while |
تا وقتی یک قاعده برقرار است؛ بهروزرسانی داخل بدنه | قبل از هر دور |
for |
از اول شروع و توقف و گام را میدانید | قبل از هر دور (سرِ سهتکه) |
do...while |
بدنه حداقل یکبار باید اجرا شود | بعد از هر دور |
مثالهای مبتدی while هنوز اغلب با شمارندهٔ عددی کوچکاند. فرق در جاست: let i = 0 را قبل از حلقه مینویسید و i++ (یا تغییر دیگر) را داخل آکولاد. اگر چیزی که شرط میخواند را هیچوقت عوض نکنید، حلقه ممکن است هرگز تمام نشود.
let i = 0;
while (i < 5) {
console.log(i);
i++;
}
با while بشمارید
i قبل از حلقه از 0 شروع میشود. هر دور همان را چاپ میکند و یکی اضافه میکند. در کنسول 0 تا 4 میبینید — پنج دور. 5 چاپ نمیشود چون شرط اول رد میشود. اگر i++ داخل بدنه نباشد، i تا ابد روی 0 میماند.
یک دور را آرام بخوانید: شرط → بدنه (همراه بهروزرسانی) → دوباره شرط. برای همین فراموش کردن بهروزرسانی در while همان دام کلاسیک حلقهٔ بینهایت است.
let n = 1;
while (n <= 3) {
console.log("step " + n);
n++;
}
از یک شروع کنید با برچسب روشنتر
اینجا شمارنده از 1 است و شرط n <= 3؛ پس سه خط step 1 تا step 3 میبینید. شروع از صفر یا یک سلیقهٔ طراحی است — فقط شرط را با همان انتخاب جور کنید، درست مثل for.
let total = 0;
let k = 1;
while (k <= 4) {
total = total + k;
k++;
}
console.log(total);
جمع را دوربهدور بسازید
total از صفر شروع میشود. هر دور مقدار فعلی k را اضافه میکند و بعد k را جلو میبرد. بعد از 1+2+3+4 میشود 10. نتیجهٔ در حال رشد بیرون حلقه میماند؛ شمارندهای که شرط را میگرداند کنارش است.
let left = 3;
while (left > 0) {
console.log("left=" + left);
left--;
}
console.log("done");
تا توقف، معکوس بشمارید
همهٔ حلقهها فقط بالا نمیروند. این یکی left=3، left=2، left=1 را چاپ میکند و بعد done. کم کردن شمارنده هم بهروزرسانی صادقانه است — هر تغییری که حلقه را به پایان نزدیک کند درست است.
let x = 0;
do {
console.log("tick " + x);
x++;
} while (x < 1);
console.log("after=" + x);
do...while اول بدنه را اجرا میکند
do...while یکبار بدنه را اجرا میکند، بعد شرط را میسنجد. حتی اگر برای یک while عادی شرط از همان اول غلط باشد، دور اول باز هم انجام میشود. اینجا tick 0 را میبینید و بعد after=1. وقتی داستان «یکبار امتحان کن، بعد اگر لازم بود تکرار» است، این شکل میخورد.
نتیجه را روی صفحه ببینید
با while یک شمارش کوتاه اجرا کنید، پیام بسازید، بعد روی صفحه بنویسید.
<!DOCTYPE html>
<html>
<head>
<title>While — page count</title>
</head>
<body>
<p id="out">…</p>
<script>
let msg = "";
let i = 1;
while (i <= 4) {
msg = msg + i + " ";
i++;
}
let box = document.getElementById("out");
box.textContent = "count=" + msg.trim();
</script>
</body>
</html>
صفحه count=1 2 3 4 را نشان میدهد. حد بالا را عوض کنید، رفرش کنید، فهرست تازه را بخوانید. وقتی برنامهٔ سهتکه از اول روشن است for را ترجیح بدهید؛ وقتی قانون توقف یک شرط ساده است و بهروزرسانی داخل بدنه جا میگیرد، while تمیزتر است. جلسهٔ بعد با for...of و for...in روی مقدارها و کلیدها راه میرود.
خودتان امتحان کنید
- با
i < 5وi++داخل بدنه یکwhileبنویسید که0تا4را لاگ کند. - عوضش کنید تا با
i <= 5مقادیر1تا5را لاگ کند. - مجموع
1تا5را باwhileدرtotalبریزید و نتیجه را لاگ کنید. - از
5تا1معکوس بشمارید و بعدdoneرا لاگ کنید. - یک
do...whileبنویسید که حتی وقتی شرط از اول غلط است یک خط چاپ کند. - در دموی HTML فقط حد بالا را عوض کنید، رفرش کنید، متن
count=را بخوانید.
اشتباههای رایج
- فراموش کردن بهروزرسانی داخل بدنه طوری که شرط هرگز غلط نشود (حلقهٔ بینهایت)
- یکی کم/زیاد شمردن:
i < 5بهجایi <= 5(یا برعکس) - انتخاب
do...whileوقتی واقعاً ممکن است صفر دور بخواهید - گذاشتن بهروزرسانی جای غلط یا عوض کردن متغیری غیر از آنکه شرط میخواند
whileطولانی وقتی سرِ واضحِforخواناتر میبود
خلاصه
whileتا وقتی شرط درست است بدنه را تکرار میکند- متغیرها را قبل از حلقه آماده کنید؛ داخل بدنه بهروزشان کنید
- برای شمارش، جمع، و شمارش معکوس عالی است
do...whileحداقل یکبار بدنه را اجرا میکند، بعد شرط را میسنجد- وقتی شروع/توقف/گام روشن است
for؛ وقتی یک قاعدهٔ جاری کافی استwhile - بعدی: for...of و for...in — راه رفتن روی مقدارها و کلیدها
🧠 دانش خود را بیازمایید
دانش خود را بیازمایید
خود را با این آزمون تعاملی به چالش بکشید و ببینید موضوع را چقدر خوب درک کردهاید
📝 دستورالعملها
- هر سوال را با دقت بخوانید
- بهترین پاسخ را برای هر سوال انتخاب کنید
- میتوانید آزمون را هر چند بار که میخواهید تکرار کنید
- پیشرفت شما در بالا نمایش داده میشود