حلقههای While (Java While Loop)
حلقههای While: تکرار تا رسیدن به هدف 🔄⏳
حلقهها ابزاری هستند که به ما اجازه میدهند یک بلوک از کد را تا زمانی که یک شرط خاص "درست" است، بارها و بارها اجرا کنیم. این کار باعث صرفهجویی در زمان و جلوگیری از تکرار کد میشود.
۱. حلقه While
این حلقه قبل از هر بار اجرا، شرط را چک میکند. اگر شرط غلط باشد، کد حتی یکبار هم اجرا نمیشود:
{code_block('int i = 0;\nwhile (i < 5) {\n System.out.println(i);\n i++; // فراموش نکنید که شمارنده را زیاد کنید!\n}')}true باقی بماند (مثلاً فراموش کنید شمارنده را تغییر دهید)، برنامه شما تا ابد ادامه مییابد و باعث هنگ کردن سیستم میشود!
۲. حلقه Do...While 🔄
تفاوت اصلی این حلقه در این است که حداقل یکبار کد را اجرا میکند و سپس شرط را چک میکند. چون شرط در انتهای حلقه قرار دارد:
{code_block('int i = 0;\ndo {\n System.out.println(i);\n i++;\n} while (i < 5);')}چه زمانی از While استفاده کنیم؟
معمولاً وقتی تعداد دقیق تکرارها را نمیدانیم (مثلاً مکرراً از کاربر سوال میپرسیم تا وقتی که کلمه "exit" را وارد کند)، از while استفاده میکنیم.
مثال کاربردی:
خواندن اطلاعات از یک فایل تا زمانی که به انتهای فایل برسیم، یکی از رایجترین موارد استفاده از حلقههای While است.
while تعریف میشود، برخلاف حلقه for که در خودش تعریف میگردد.
بخش تخصصی: کنترل جریان در پروژههای صنعتی 🛠️💎
در این بخش، به نکاتی میپردازیم که تفاوت یک کدآموز و یک مهندس نرمافزار حرفهای را مشخص میکنند.
۱. پیچیدگی زمانی (Time Complexity) در حلقهها
هر بار که حلقهای مینویسید، باید به تعداد تکرارهای آن فکر کنید. در جاوا، حلقههای تودرتو (Nested Loops) میتوانند به سرعت باعث کُند شدن برنامه شوند (مرتبه O(n²)). همیشه سعی کنید با استفاده از الگوریتمهای بهتر یا ساختارهایی مثل HashMap، نیاز به حلقههای تودرتو را به حداقل برسانید.
۲. بهینهسازی شرطها (Early Return)
یکی از اصولیترین روشها برای نوشتن کدهای تمیز، استفاده از Early Return است. به جای نوشتن شرطهای تو در تو (Nested Ifs)، ابتدا حالتهای خطا را چک کرده و از متد خارج شوید. این کار باعث میشود کد شما "تخت" (Flat) و خواناتر شود.
۳. امنیت و اعتبارسنجی (Validation)
کنترل جریان فقط برای منطق برنامه نیست؛ بلکه برای امنیت هم حیاتی است. همیشه ورودیهای کاربر را قبل از پردازش با استفاده از شرطها اعتبارسنجی کنید تا از بروز مشکلاتی مثل NullPointerException یا حملات تزریق کد جلوگیری شود.
نکته تکمیلی: الگوی Spinlock در حلقهها 🌀⚙️
در برنامهنویسی سطح پایدار و فرکانسِ بالا (مثل درایورهای سختافزاری)، گاهی از یک حلقه while خالی برای منتظر ماندن استفاده میشود که به آن Spinlock میگویند. اگرچه این کار باعث مصرف شدید CPU میشود، اما تاخیر (Latency) بسیار کمتری نسبت به متوقف کردنِ کاملِ نخ دارد. البته در برنامههایِ معمولیِ بیزینسی، همیشه باید از Thread.sleep() یا مکانیزمهایِ Wait/Notify استفاده کنید تا منابع سیستم هدر نرود.
تمرینهای عملی
برای تثبیت یادگیری این درس تمرینهای زیر را حل کنید
با استفاده از حلقه while، اعداد 3 تا 1 را به صورت معکوس چاپ کنید.
public class Main {
public static void main(String[] args) {
int count = 3;
while (count > 0) {
System.out.println(count);
count--;
}
}
}
آماده رفتن به درس بعدی هستید؟
این درس را به پایان رساندید و میتوانید به درس بعدی بروید.