javascriptwhile loopحلقه while در جاوااسکریپت
حلقه while در جاوااسکریپت تا برقرار بودن شرط تکرار میشود؛ ترتیب بررسی، تغییر وضعیت و جلوگیری از حلقهٔ بیپایان را با مثال موجودی ببینید.
مفهوم به زبان ساده
حلقه while برای تکراری مناسب است که ادامهٔ آن با یک شرط روشن تعیین میشود. پیش از هر دور، شرط بررسی میشود؛ اگر truthy باشد، بدنه اجرا میشود و دوباره شرط بررسی خواهد شد. اگر همان بار اول شرط نادرست باشد، بدنه حتی یکبار هم اجرا نمیشود. برخلاف #for-loop، محل تغییر وضعیت در ساختار while از قبل جدا نشده و باید خودتان آن را در بدنه یا منطق مرتبط قرار دهید.
مثال آموزشی، مبلغی را به دستههای کامل ۳۰۰۰۰ تومانی تقسیم میکند. هر دور یک دسته را میشمارد و مبلغ آن را از باقیمانده کم میکند. شرط remaining >= bundlePrice مانع کمکردن دستهای میشود که مبلغ کافی برایش نداریم. پس از سه دور، ۱۰۰۰۰ باقی میماند و حلقه پایان مییابد. این مثال شبیهسازی محلی است و هیچ خرید یا تراکنشی انجام نمیدهد.
پیش از نوشتن while از خود بپرسید چه چیزی در هر دور تغییر میکند که سرانجام شرط را نادرست خواهد کرد. اگر پاسخ روشنی ندارید، خطر حلقهٔ بیپایان وجود دارد. در مثال باید bundlePrice عدد مثبت معتبر باشد؛ صفر بودن آن باعث میشود باقیمانده کم نشود. برای مقادیر بسیار بزرگ هم یک فرمول ممکن است از میلیونها دور مناسبتر باشد. while را برای منتظرماندن تا پاسخ شبکه به شکل حلقهٔ همگام به کار نبرید؛ چنین حلقهای اجرای برنامه و رابط را مشغول میکند و جای #promise نیست.
کجا به کار میآید؟
- شبیهسازی مرحلهای فرایندی با شرط پایان مشخص
- پردازش تا زمانی که داده یا ظرفیت کافی باقی مانده است
از تعریف تا یک مثال واقعی
let remaining = 100000;
const bundlePrice = 30000;
let bundles = 0;
while (remaining >= bundlePrice) {
remaining -= bundlePrice;
bundles += 1;
}
console.log(bundles);
console.log(remaining);
3 10000
این مثال چطور کار میکند؟
در شروع، موجودی ۱۰۰۰۰۰ برای یک دستهٔ ۳۰۰۰۰ تومانی کافی است.
پس از دورهای اول و دوم، باقیمانده به ۷۰۰۰۰ و ۴۰۰۰۰ میرسد.
دور سوم باقیمانده را ۱۰۰۰۰ و شمار دستهها را ۳ میکند.
شرط بعدی نادرست است؛ حلقه پایان مییابد و دو مقدار نهایی چاپ میشوند.
اشتباه رایج
شرطی که هیچ دادهٔ مؤثر بر آن تغییر نکند، ممکن است همیشه درست بماند. بهویژه continue میتواند خط تغییر وضعیت را رد کند؛ مسیرهای ادامه و خروج را بررسی کنید.
این را به خاطر بسپارید
هر while باید شرط پایان قابل توضیح و تغییر وضعیت مؤثر داشته باشد؛ بدنه ممکن است صفر بار اجرا شود.