درس ۱۷ روبی: اگر... وگرنه، دو راه برای یک تصمیم
در درس قبل ربات روبی فقط در یک حالت کاری میکرد. حالا با if / else برای هر دو حالت برنامه دارد: اگر دیوار بود یک کار، وگرنه کاری دیگر.
هدف درس اگر... وگرنه
هدف درس ۱۷ روبی این است که کودک بفهمد هر تصمیم دو طرف دارد. با بخش «وگرنه» یا else، برنامه مطمئن میشود که در هر حالت دقیقاً یکی از دو مسیر اجرا شود. این ساختار برنامه را کاملتر و قابل پیشبینیتر میکند.
در پایان درس، دانشآموز میتواند برای یک حسگر، هر دو حالت درست و نادرست را در نظر بگیرد و برنامهای بنویسد که روی چند نقشهی متفاوت درست کار کند.
مفهوم برنامهنویسی: انشعاب در برنامه
در علوم کامپیوتر به if / else «انشعاب» میگویند؛ مثل دوراهی جاده که مسیر برنامه را دو شاخه میکند. نکتهی کلیدی این است که دو شاخه هرگز با هم اجرا نمیشوند. یا بدنهی if اجرا میشود یا بدنهی else.
برای والدین: این همان منطقی است که در تصمیمگیری روزمره داریم. «اگر تکلیفت تمام شد بازی کن، وگرنه اول تکلیف». کودکی که این ساختار را در روبی تمرین میکند، یاد میگیرد به همهی حالتهای ممکن یک مسئله فکر کند و هیچ حالتی را از قلم نیندازد.
فعالیت قدمبهقدم با ربات روبی
در یک ماموریت نمونه، ربات روبی در راهرویی حرکت میکند که در جاهای نامعلوم دیوار دارد. برنامه اینطور است: repeat(8): if frontIsWall: turnRight else: forward. در هر دور، روبی نگاه میکند؛ اگر دیوار بود میچرخد و اگر نبود یک قدم جلو میرود.
در حالت بلوکی، بلوک «❓ اگر» دو جای خالی دارد: یکی برای «اگر» و یکی برای «وگرنه». «↻ راست» را در بخش اول و «⬆️ جلو» را در بخش دوم میگذاریم و کل بلوک را داخل یک «⟳ تکرار» قرار میدهیم. میتوان حسگر را هم عوض کرد، مثلاً if frontIsWater: turnLeft else: forward برای دور زدن آب.
- ✅ بخش if: کاری که وقتی شرط درست است لازم است
- ✅ بخش else: کاری که در غیر این صورت لازم است
- ✅ حلقهی بیرونی: تا تصمیم چند بار تکرار شود
- ✅ آزمایش روی نقشههای مختلف تا عمومی بودن برنامه ثابت شود
اشتباههای رایج و راه رفعشان
گاهی کودک دستوری را هم داخل if و هم داخل else تکرار میکند، در حالی که باید بیرون از شرط باشد. گاهی هم جای دو شاخه را برعکس میگذارد: اگر دیوار بود جلو برو، وگرنه بچرخ. نتیجه برخورد مداوم با دیوار است.
راه رفع: یک جدول دوستونه بکشید؛ ستون «دیوار هست» و ستون «دیوار نیست». کودک در هر ستون بنویسد روبی باید چه کند. بعد همین جدول را مستقیم به بلوک تبدیل کند.
خطای ظریفتر این است که کودک if / else را بیرون حلقه بگذارد؛ آنوقت روبی فقط یک بار تصمیم میگیرد و بعد متوقف میشود. یادآوری کنید که برای تصمیمگیری در هر قدم، کل بلوک شرط باید داخل بلوک تکرار قرار بگیرد.
فعالیت بدون کامپیوتر: دوراهی
روی کاغذ یک نقشهی ساده با دوراهی بکشید و کارتهایی با نوشتهی «دیوار» یا «راه باز» بسازید. کودک کارتی برمیدارد و بر اساس برنامهی if / else که خودش نوشته، مهرهی روبی را حرکت میدهد. با کارتهای تصادفی میفهمد برنامهاش در همهی حالتها کار میکند یا نه.
میتوانید کارتهای «آب» را هم اضافه کنید تا کودک ببیند برنامهاش برای حالتی که پیشبینی نکرده چه میکند. این بحث طبیعی به این پرسش میرسد که آیا یک if / else برای همهی حالتها کافی است؟ پاسخ این پرسش، زمینهی درسهای هزارتو و شرطهای ترکیبی در ادامهی مسیر روبی است.
نکته برای معلم و والدین
از این درس روی «برنامهی عمومی» تأکید کنید. برنامهای که فقط روی یک نقشه کار کند خوب است، اما برنامهای که با تغییر جای دیوارها هم درست کار کند عالی است. در طرح درس آکادمی روبی، همین عمومی بودن معیار ارزیابی ردهی ۳ است.
برای تمرین بیشتر، از کودک بخواهید برنامهاش را برای یک دوست یا یکی از اعضای خانواده توضیح دهد: «اگر این بود، روبی این کار را میکند؛ وگرنه آن کار را». توضیح دادن با صدای بلند، خطاهای پنهان را آشکار میکند. همچنین کمکم حالت کد را نشان دهید تا کودک ببیند else در کد هم دقیقاً همان «وگرنه» بلوک است.
سوالهای پرتکرار
فرق if با if / else چیست؟
if تنها فقط در حالت درست کاری میکند. if / else برای حالت نادرست هم دستور دارد، پس در هر اجرا دقیقاً یکی از دو بخش اجرا میشود.
آیا میشود چند شرط را پشت هم گذاشت؟
بله، و این کار در درسهای بعدی مثل هزارتو لازم میشود. شرطهای تو در تو و elif جزو مسیر پیشرفتهی روبی هستند.
کودک بین if و else گیج میشود؛ چه کنیم؟
با جملههای روزمره تمرین کنید و از او بخواهید قبل از ساختن بلوک، دو حالت را با صدای بلند بگوید.