دوره‌ها / JAVA / حلقه‌های While (Java While Loop)

حلقه‌های While (Java While Loop)

15 دقیقه Article

حلقه‌های While: تکرار تا رسیدن به هدف 🔄⏳

حلقه‌ها ابزاری هستند که به ما اجازه می‌دهند یک بلوک از کد را تا زمانی که یک شرط خاص "درست" است، بارها و بارها اجرا کنیم. این کار باعث صرفه‌جویی در زمان و جلوگیری از تکرار کد می‌شود.

۱. حلقه While

این حلقه قبل از هر بار اجرا، شرط را چک می‌کند. اگر شرط غلط باشد، کد حتی یکبار هم اجرا نمی‌شود:

{code_block('int i = 0;\nwhile (i < 5) {\n System.out.println(i);\n i++; // فراموش نکنید که شمارنده را زیاد کنید!\n}')}
خطر حلقه بی‌نهایت (Infinite Loop): اگر شرط همیشه true باقی بماند (مثلاً فراموش کنید شمارنده را تغییر دهید)، برنامه شما تا ابد ادامه می‌یابد و باعث هنگ کردن سیستم می‌شود!

۲. حلقه Do...While 🔄

تفاوت اصلی این حلقه در این است که حداقل یکبار کد را اجرا می‌کند و سپس شرط را چک می‌کند. چون شرط در انتهای حلقه قرار دارد:

{code_block('int i = 0;\ndo {\n System.out.println(i);\n i++;\n} while (i < 5);')}

چه زمانی از While استفاده کنیم؟

معمولاً وقتی تعداد دقیق تکرارها را نمی‌دانیم (مثلاً مکرراً از کاربر سوال می‌پرسیم تا وقتی که کلمه "exit" را وارد کند)، از while استفاده می‌کنیم.

مثال کاربردی:

خواندن اطلاعات از یک فایل تا زمانی که به انتهای فایل برسیم، یکی از رایج‌ترین موارد استفاده از حلقه‌های While است.

نکته فنی: متغیرِ شمارنده (Counter) معمولاً خارج از بدنه حلقه while تعریف می‌شود، برخلاف حلقه for که در خودش تعریف می‌گردد.
<hr style="margin: 50px 0; border: 0; border-top: 1px dashed rgba(255,255,255,0.1);">

بخش تخصصی: کنترل جریان در پروژه‌های صنعتی 🛠️💎

در این بخش، به نکاتی می‌پردازیم که تفاوت یک کدآموز و یک مهندس نرم‌افزار حرفه‌ای را مشخص می‌کنند.

۱. پیچیدگی زمانی (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 استفاده کنید تا منابع سیستم هدر نرود.

تمرین‌های عملی

برای تثبیت یادگیری این درس تمرین‌های زیر را حل کنید

شمارش معکوس Easy
سوال تمرین

با استفاده از حلقه while، اعداد 3 تا 1 را به صورت معکوس چاپ کنید.

پاسخ تمرین
JAVA
public class Main {
  public static void main(String[] args) {
    int count = 3;
    while (count > 0) {
      System.out.println(count);
      count--;
    }
  }
}

آماده رفتن به درس بعدی هستید؟

این درس را به پایان رساندید و می‌توانید به درس بعدی بروید.