بخش سوم: حلقهٔ do...while
۳-۱. تعریف
حلقهٔ do...while مانند حلقهٔ while است، با یک تفاوت مهم: بدنهٔ حلقه حداقل یک بار اجرا میشود، حتی اگر شرط از ابتدا نادرست باشد. دلیل این امر آن است که در این حلقه، شرط پس از اجرای بدنه بررسی میشود.
۳-۲. ساختار
<?php
do {
// دستوراتی که باید تکرار شوند
} while (شرط);
?>
اجزای این ساختار:
- کلمهٔ کلیدی
do - بدنهٔ حلقه داخل آکولاد
{ } - کلمهٔ کلیدی
while - شرط داخل پرانتز
- نقطهویرگول
;در پایان
نکتهٔ مهم: در حلقهٔ do...while، پس از پرانتز شرط حتماً باید نقطهویرگول نوشته شود. فراموش کردن آن باعث خطا میشود.
۳-۳. نحوهٔ اجرا
حلقهٔ do...while به ترتیب زیر کار میکند:
- بدنهٔ حلقه اجرا میشود.
- سپس شرط بررسی میشود.
- اگر شرط درست (
true) باشد، دوباره به ابتدا برمیگردد و بدنه را اجرا میکند. - اگر شرط نادرست (
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 وقتی بدنه نباید اجرا شود |
اجرای ناخواستهٔ بدنه یک بار |
| نوشتن شرط پیش از بدنه | ساختار اشتباه و خطا |
۳-۱۰. فعالیت کلاسی
- با حلقهٔ
do...whileاعداد ۱ تا ۱۰ را چاپ کنید. - با حلقهٔ
do...whileمجموع اعداد ۱ تا ۵ را حساب کنید. - برنامهای بنویسید که با
do...whileحداقل یک بار پیام خوشآمد چاپ کند، حتی اگر شرط نادرست باشد.