در این مقاله، به آموزش حلقه do while در جاوا می پردازیم و روش استفاده از آن را به همراه چند مثال توضیح می دهیم.
در تمام حلقه هایی که تاکنون نوشته ایم، بدنه ی حلقه ممکن است به دفعات زیادی اجرا شود؛ اما این امکان نیز وجود دارد که بدنه ی این حلقه به هیچ وجه اجرا نشود. بعنوان مثال، برنامه ی موجودی بانکی(bank balance) را که سود جزئی را نمایش می داد فراخوانی کنید؛ این برنامه در تصویر 6.8 در اینجا، نشان داده شده است. در ابتدای این برنامه، از کاربر درخواست می شود که آیا می خواهد موجودی سال بعد حساب خود را مشاهده کند یا خیر. اگر کاربر هر چیز دیگری به جز یک خط که با 'y' شروع شود، را وارد کند، بدنه ی حلقه هرگز اجرا نمی شود.
به طور مشابه، در تصویر 6.10 برنامه ی EnterSmallValue را در این مقاله فراخوانی کنید. در این برنامه، از کاربر درخواست می شود تا مقداری را وارد کند و اگر اگر کاربر یک مقدار که کوچکتر یا مساوی با 3 باشد را وارد کند، بدنه ی حلقه ای که خطا را گزارش می کند، هرگز اجرا نمی شود.
در هریک از این موارد، متغیر کنترل حلقه، در بالای حلقه و قبل از اینکه بدنه ی حلقه شانس اجرا شدن داشته باشد، ارزیابی می شود. هردوی حلقه های while و for پیش آزمون(pretest) هستند. در هرکدام، متغیر کنترل حلقه قبل از اینکه بدنه ی حلقه اجرا شود، تست می شود.
گاهی اوقات، ممکن است نیاز داشته باشیم که بدنه ی یک حلقه حداقل یک بار اجرا شود. در این صورت، نیاز داریم یک حلقه بنویسیم که پس از اولین تکرار، در پایین آن، بررسی (متغیر کنترل حلقه) انجام شود. حلقه ی do…while مقدار متغیر کنترل حلقه را در پایین حلقه و پس از اینکه بدنه ی حلقه یک بار اجرا شد، بررسی می کند. حلقه ی do…while یک حلقه ی پس آزمون(posttest) است. که در آن متغیر کنترل حلقه پس از اینکه بدنه ی حلقه، یک بار اجرا شد، مورد بررسی قرار می گیرد.
تصویر 6.16 ساختار کلی یک حلقه ی do…while را نشان می دهد. توجه کنید که بدنه ی این حلقه، قبل از اینکه سوال کنترل حلقه پرسیده شود، یک بار اجرا می شود. تصویر 6.17 یک اپلیکیشن BankBalance2 را نشان می دهد که حاوی یک حلقه ی do while است. این حلقه با کلمه ی کلیدی do که در تصویر، رنگی یا سایه دار شده است، شروع می شود.
سپس بدنه ی این حلقه دنبال می شود؛ که در داخل یک جفت آکولاد قرار دارد. با اجرای این بدنه، موجودی سال اول، قبل از اینکه کاربر هیچ گزینه ای را انتخاب کند، نشان داده می شود. در پایین حلقه، سوال زیر از کاربر درخواست می شود:
حالا کاربر می تواند موجودی های بیشتری را مشاهده کند، اما مشاهده ی مقدار اول اجتناب ناپذیر است. سپس پاسخ کاربر، در ارزیابی عبارت سایه دار، در پایین حلقه بررسی می شود. اگر پاسخ کابر 'y' به معنی yes باشد، حلقه تکرار می شود.
(تصویر 6.16 : ساختار کلی یک حلقه ی do...while )
(تصویر 6.17 : یک حلقه ی do…while برای اپلیکیشن BankBalance2 )
برای دانلود کد بالا، اینجا کلیک کنید.
ما هیچوقت مجبور نیستیم که از حلقه ی do…while استفاده کنیم. در مثال موجودی بانکی(bank balance)، می توانیم همین منطق و نتیجه که در تصویر 6.17 نشان داده شده است را با بدون شرط نمایش دادن سال اول موجودی بانکی، یک بار قبل از اینکه حلقه را شروع کنیم، به دست بیاوریم و از کاربر بخواهیم مقداری را وارد کند؛ سپس یک حلقه ی while را شروع کنیم که ممکن است وارد آن نشویم.
اما وقتی که می دانیم که می خواهیم کاری انجام دهیم که حداقل یک بار اجرا شود، حلقه ی do…while مناسب است. وقتی که بدنه ی یک حلقه ی do…while حاوی یک دستور تکی است، نیازی نیست از آکولادها برای دربرگرفتن این دستور استفاده کنید. بعنوان مثال، حلقه ی زیر به درستی numberValue را به total، تا هنگامیکه total کمتر از 200 است، اضافه می کند:
با اینکه در این مورد، نیازی به آکولادها نیست، بسیاری از برنامه نویسان، استفاده از آن را توصیه می کنند. انجام این کار، باعث می شود که فکر نکنیم در خط سوم از کد بالا ، می خواهیم به جای پایان دادن به این حلقه ی do…while، یک حلقه ی while جدید ایجاد کنیم. بنابراین، با اینکه نتیجه ی هردو یکسان است، در مثال زیر، که از یک جفت آکولاد استفاده شده است، کمتر ممکن است برای خواننده سوء تفاهم ایجاد شود.
دو عبارت صحیح و یک عبارت اشتباه
موضوع: یادگیری اینکه چه موقع و چگونه باید از یک حلقه ی do…while استفاده کنیم:
1. حلقه ی do…while مقدار متغیر کنترل حلقه را در بالای حلقه، قبل از اینکه حلقه اجرا شود، بررسی می کند.
2. وقتی که دستورات درون بدنه ی یک حلقه باید حداقل یک بار اجرا شوند، مناسب است که از یک حلقه ی do…while استفاده کنیم.
3. وقتی که بدنه ی یک حلقه ی do…while حاوی یک دستور تکی است، نیازی نیست از آکولادها برای دربر گرفتن این دستور استفاده کنیم.
پاسخ:
عبارت شماره 1 اشتباه است. حلقه ی do…while مقدار متغیر کنترل حلقه را در پایین حلقه و پس از اینکه حلقه یک بار تکرار شد، بررسی می کند.