بلوک «تا وقتی» در روبی: تکرار تا رسیدن
وقتی نمیدانیم چند قدم تا هدف مانده، حلقهی تا وقتی کار را تمام میکند: «تا وقتی به هدف نرسیدی، جلو برو».
تا وقتی چه کار میکند؟
حلقهی while قبل از هر دور شرطش را بررسی میکند. اگر شرط برقرار باشد بدنه اجرا میشود و دوباره شرط پرسیده میشود؛ اگر برقرار نباشد، حلقه تمام میشود و برنامه ادامه پیدا میکند.
روبی برای حلقههای بیپایان چند محافظ دارد. اگر چند دور پشت سر هم هیچ چیز عوض نشود، مثلا روبی مدام به دیوار بخورد، حلقه بیسروصدا تمام میشود؛ برای همین while True با بدنهی forward یعنی «تا جایی که میتوانی برو». اگر روبی فقط در جا بچرخد و به حالت قبلی برگردد، پیام «روبی داره یه کار رو بینهایت تکرار میکنه» میآید. بیش از ۱۰۰۰ دور هم با خطای حلقهی طولانی متوقف میشود.
شکل بلوکی و شکل کد
بلوک «♾️ تا_وقتی» یک فهرست انتخاب حسگر دارد که پیشفرضش جلو_باز است، بهاضافهی گزینهی «نه» و یک بدنه. در کد شکل پایتونی دارد و کلمهی فارسی تا_وقتی یا وقتی هم قبول میشود.
- ✅ while frontIsClear: و بدنه با تورفتگی
- ✅ while not onTarget:
- ✅ while True: برای «تا جایی که میشود»
- ✅ فارسی: تا_وقتی جلو_باز:
یک مثال کوچک با ربات روبی
روبی در یک راهروی مستقیم است و نمیدانیم هدف چند خانه جلوتر است. برنامه: while not onTarget: forward. روبی تا وقتی روی هدف نیست قدم برمیدارد و روی هدف میایستد. همین برنامه روی راهروی کوتاهتر یا بلندتر هم بدون تغییر کار میکند؛ یعنی یک راهحل عمومی.
اشتباههای رایج
در حلقهی while، بدنه باید چیزی را عوض کند که روی شرط اثر بگذارد؛ وگرنه حلقه هیچوقت تمام نمیشود.
- ✅ جا انداختن forward داخل بدنه
- ✅ انتخاب شرطی که از اول برقرار نیست و بدنه را هیچوقت اجرا نمیکند
- ✅ قاطی کردن while با if که فقط یک بار میپرسد
در کدام درسها و لیگها استفاده میشود؟
حلقهی شرطی در درس ۱۸ «تا وقتی برس» با while not onTarget معرفی میشود و در درس ۲۱ «هزارتو» همراه if برای حل خودکار هزارتو به کار میرود. در درس ۲۰ هم با فاصلهسنج ترکیب میشود. حسگر جلو_باز با while در تمرینهای لیگ ۲، ۳ و ۴ زیاد دیده میشود.
نکته برای والدین و معلم
while را با مثال «تا وقتی به در نرسیدی، راه برو» توضیح دهید. بعد نقشه را عوض کنید و نشان دهید همان برنامه هنوز کار میکند. این لحظه، کودک تفاوت راهحل خاص و الگوریتم عمومی را میفهمد.
سوالهای پرتکرار
while True در روبی هنگ نمیکند؟
نه. اگر چیزی عوض نشود، حلقه آرام تمام میشود و حداکثر هم ۱۰۰۰ دور اجرا میشود.
فرق while با repeat چیست؟
repeat تعداد مشخصی تکرار میکند؛ while تا وقتی شرط برقرار است ادامه میدهد.
کلمهی فارسی while چیست؟
تا_وقتی یا وقتی؛ مثلا تا_وقتی جلو_باز: و بعد جلو.