در حال بارگذاری...

حلقهٔ while

در حلقهٔ for سه تکهٔ شروع و شرط و به‌روزرسانی یک‌جا در سرِ حلقه نشسته بودند. گاهی فقط این را می‌دانید: «تا وقتی این درست است ادامه بده» — و خودِ شمارنده وسط کار عوض می‌شود. while اول شرط را می‌بیند، بدنه را اجرا می‌کند، دوباره شرط را چک می‌کند. همان تکرار کار است؛ شکل نوشتن فرق دارد.

حلقهٔ while چطور جلو می‌رود؟

تا وقتی عبارت داخل پرانتز درست باشد، بلوک { } دوباره اجرا می‌شود. در سرِ حلقه جای جدا برای شروع یا به‌روزرسانی نیست. متغیرها را قبل از حلقه آماده می‌کنید و داخل بدنه عوضشان می‌کنید تا بالاخره شرط غلط شود. شرط که غلط شد، حلقه تمام است و برنامه از خط بعد ادامه می‌دهد.

while و for و do...while در یک نگاه

📊 شکل‌های روزمرهٔ حلقه

شکل کی جور است چک شرط
while تا وقتی یک قاعده برقرار است؛ به‌روزرسانی داخل بدنه قبل از هر دور
for از اول شروع و توقف و گام را می‌دانید قبل از هر دور (سرِ سه‌تکه)
do...while بدنه حداقل یک‌بار باید اجرا شود بعد از هر دور

مثال‌های مبتدی while هنوز اغلب با شمارندهٔ عددی کوچک‌اند. فرق در جاست: let i = 0 را قبل از حلقه می‌نویسید و i++ (یا تغییر دیگر) را داخل آکولاد. اگر چیزی که شرط می‌خواند را هیچ‌وقت عوض نکنید، حلقه ممکن است هرگز تمام نشود.

شمارش ساده با while

javascript
let i = 0;
while (i < 5) {
console.log(i);
i++;
}

با while بشمارید

i قبل از حلقه از 0 شروع می‌شود. هر دور همان را چاپ می‌کند و یکی اضافه می‌کند. در کنسول 0 تا 4 می‌بینید — پنج دور. 5 چاپ نمی‌شود چون شرط اول رد می‌شود. اگر i++ داخل بدنه نباشد، i تا ابد روی 0 می‌ماند.

یک دور را آرام بخوانید: شرط → بدنه (همراه به‌روزرسانی) → دوباره شرط. برای همین فراموش کردن به‌روزرسانی در while همان دام کلاسیک حلقهٔ بی‌نهایت است.

گام واضح لاگ کن

javascript
let n = 1;
while (n <= 3) {
console.log("step " + n);
n++;
}

از یک شروع کنید با برچسب روشن‌تر

اینجا شمارنده از 1 است و شرط n <= 3؛ پس سه خط step 1 تا step 3 می‌بینید. شروع از صفر یا یک سلیقهٔ طراحی است — فقط شرط را با همان انتخاب جور کنید، درست مثل for.

جمع با while

javascript
let total = 0;
let k = 1;
while (k <= 4) {
total = total + k;
k++;
}
console.log(total);

جمع را دوربه‌دور بسازید

total از صفر شروع می‌شود. هر دور مقدار فعلی k را اضافه می‌کند و بعد k را جلو می‌برد. بعد از 1+2+3+4 می‌شود 10. نتیجهٔ در حال رشد بیرون حلقه می‌ماند؛ شمارنده‌ای که شرط را می‌گرداند کنارش است.

شمارش معکوس با while

javascript
let left = 3;
while (left > 0) {
console.log("left=" + left);
left--;
}
console.log("done");

تا توقف، معکوس بشمارید

همهٔ حلقه‌ها فقط بالا نمی‌روند. این یکی left=3، left=2، left=1 را چاپ می‌کند و بعد done. کم کردن شمارنده هم به‌روزرسانی صادقانه است — هر تغییری که حلقه را به پایان نزدیک کند درست است.

do...while حداقل یک‌بار

javascript
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 یک شمارش کوتاه اجرا کنید، پیام بسازید، بعد روی صفحه بنویسید.

شمارش صفحه با while

html
<!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 روی مقدارها و کلیدها راه می‌رود.

خودتان امتحان کنید

  1. با i < 5 و i++ داخل بدنه یک while بنویسید که 0 تا 4 را لاگ کند.
  2. عوضش کنید تا با i <= 5 مقادیر 1 تا 5 را لاگ کند.
  3. مجموع 1 تا 5 را با while در total بریزید و نتیجه را لاگ کنید.
  4. از 5 تا 1 معکوس بشمارید و بعد done را لاگ کنید.
  5. یک do...while بنویسید که حتی وقتی شرط از اول غلط است یک خط چاپ کند.
  6. در دموی HTML فقط حد بالا را عوض کنید، رفرش کنید، متن count= را بخوانید.

اشتباه‌های رایج

  • فراموش کردن به‌روزرسانی داخل بدنه طوری که شرط هرگز غلط نشود (حلقهٔ بی‌نهایت)
  • یکی کم/زیاد شمردن: i < 5 به‌جای i <= 5 (یا برعکس)
  • انتخاب do...while وقتی واقعاً ممکن است صفر دور بخواهید
  • گذاشتن به‌روزرسانی جای غلط یا عوض کردن متغیری غیر از آن‌که شرط می‌خواند
  • while طولانی وقتی سرِ واضحِ for خواناتر می‌بود

خلاصه

  • while تا وقتی شرط درست است بدنه را تکرار می‌کند
  • متغیرها را قبل از حلقه آماده کنید؛ داخل بدنه به‌روزشان کنید
  • برای شمارش، جمع، و شمارش معکوس عالی است
  • do...while حداقل یک‌بار بدنه را اجرا می‌کند، بعد شرط را می‌سنجد
  • وقتی شروع/توقف/گام روشن است for؛ وقتی یک قاعدهٔ جاری کافی است while
  • بعدی: for...of و for...in — راه رفتن روی مقدارها و کلیدها

🧠 دانش خود را بیازمایید

آماده شروع

دانش خود را بیازمایید

خود را با این آزمون تعاملی به چالش بکشید و ببینید موضوع را چقدر خوب درک کرده‌اید

❓
8
سوالات
🎯
70%
برای قبولی
♾️
∞
زمان
🔄
∞
تلاش‌ها

📝 دستورالعمل‌ها

  • هر سوال را با دقت بخوانید
  • بهترین پاسخ را برای هر سوال انتخاب کنید
  • می‌توانید آزمون را هر چند بار که می‌خواهید تکرار کنید
  • پیشرفت شما در بالا نمایش داده می‌شود