بخش سوم: حلقهٔ do...while

۳-۱. تعریف

حلقهٔ do...while مانند حلقهٔ while است، با یک تفاوت مهم: بدنهٔ حلقه حداقل یک بار اجرا میشود، حتی اگر شرط از ابتدا نادرست باشد. دلیل این امر آن است که در این حلقه، شرط پس از اجرای بدنه بررسی میشود.

۳-۲. ساختار

<?php
do {
    // دستوراتی که باید تکرار شوند
} while (شرط);
?>

اجزای این ساختار:

  1. کلمهٔ کلیدی do
  2. بدنهٔ حلقه داخل آکولاد { }
  3. کلمهٔ کلیدی while
  4. شرط داخل پرانتز
  5. نقطهویرگول ; در پایان

نکتهٔ مهم: در حلقهٔ do...while، پس از پرانتز شرط حتماً باید نقطهویرگول نوشته شود. فراموش کردن آن باعث خطا میشود.

۳-۳. نحوهٔ اجرا

حلقهٔ do...while به ترتیب زیر کار میکند:

  1. بدنهٔ حلقه اجرا میشود.
  2. سپس شرط بررسی میشود.
  3. اگر شرط درست (true) باشد، دوباره به ابتدا برمیگردد و بدنه را اجرا میکند.
  4. اگر شرط نادرست (false) باشد، حلقه پایان مییابد.

۳-۴. مثال اول: چاپ پنج بار سلام

<?php
$i = 1;
do {
    echo "سلام<br>";
    $i++;
} while ($i <= 5);
?>

خروجی:

سلام
سلام
سلام
سلام
سلام

در این مثال، شرط از ابتدا درست است. بنابراین رفتار حلقه مانند while است.

۳-۵. مثال دوم: اجرای حداقل یک بار

<?php
$i = 10;
do {
    echo "این جمله حداقل یک بار چاپ میشود.<br>";
    $i++;
} while ($i <= 5);
?>

خروجی:

این جمله حداقل یک بار چاپ میشود.

توضیح: مقدار اولیهٔ $i برابر ۱۰ است و شرط $i <= 5 از ابتدا نادرست است. اما چون شرط بعد از اجرای بدنه بررسی میشود، بدنه یک بار اجرا میشود و سپس حلقه پایان مییابد.

اگر همین مثال را با while مینوشتیم، بدنه هیچوقت اجرا نمیشد.

۳-۶. مثال سوم: چاپ اعداد ۱ تا ۵

<?php
$i = 1;
do {
    echo $i . "<br>";
    $i++;
} while ($i <= 5);
?>

خروجی:

1
2
3
4
5

۳-۷. مثال چهارم: دریافت ورودی از کاربر

یکی از کاربردهای رایج do...while زمانی است که میخواهیم از کاربر ورودی بگیریم و تا زمانی که ورودی معتبر نباشد، دوباره از او بپرسیم.

<?php
$number = 0;

do {
    echo "لطفاً یک عدد بین ۱ تا ۱۰ وارد کنید: ";
    $number = 7;   // در این مثال، ورودی بهصورت فرضی ۷ در نظر گرفته شده است
} while ($number < 1 || $number > 10);

echo "عدد وارد شده: " . $number;
?>

در این مثال، بدنه حداقل یک بار اجرا میشود. سپس شرط بررسی میشود. اگر عدد خارج از محدودهٔ ۱ تا ۱۰ باشد، بدنه دوباره اجرا میشود.

مطالعهٔ تکمیلی: در برنامههای واقعی، ورودی کاربر با تابع readline() یا از طریق فرمهای HTML دریافت میشود. استفاده از این توابع در این درس الزامی نیست و فقط برای درک بهتر کاربرد do...while بیان شد.

۳-۸. مقایسهٔ while و do...while

ویژگی while do...while
زمان بررسی شرط قبل از اجرای بدنه بعد از اجرای بدنه
اجرای بدنه در صورت نادرست بودن شرط از ابتدا هرگز اجرا نمیشود حداقل یک بار اجرا میشود
نقطهویرگول پس از شرط لازم نیست لازم است
کاربرد اصلی زمانی که ممکن است بدنه اصلاً اجرا نشود زمانی که بدنه باید حداقل یک بار اجرا شود

۳-۹. اشتباههای رایج

اشتباه نتیجه
فراموش کردن نقطهویرگول پس از while (شرط) خطای نحوی
فراموش کردن افزایش شمارنده حلقهٔ بیپایان
استفاده از do...while وقتی بدنه نباید اجرا شود اجرای ناخواستهٔ بدنه یک بار
نوشتن شرط پیش از بدنه ساختار اشتباه و خطا

۳-۱۰. فعالیت کلاسی

  1. با حلقهٔ do...while اعداد ۱ تا ۱۰ را چاپ کنید.
  2. با حلقهٔ do...while مجموع اعداد ۱ تا ۵ را حساب کنید.
  3. برنامه‌ای بنویسید که با do...while حداقل یک بار پیام خوشآمد چاپ کند، حتی اگر شرط نادرست باشد.