درس ۱۶ روبی: اولین تصمیم با شرط if
تا اینجا ربات روبی فقط دستورها را کورکورانه اجرا میکرد. در درس ۱۶ روبی برای اولین بار به محیط نگاه میکند و بر اساس آن تصمیم میگیرد.
هدف درس اولین تصمیم
هدف این درس آشنایی با بلوک «❓ اگر» و اولین حسگر، یعنی frontIsWall است. کودک یاد میگیرد که برنامه میتواند بپرسد «جلوی من دیوار است؟» و فقط اگر جواب بله بود، کاری انجام دهد.
این تغییر بزرگی است: برنامه دیگر فقط یک فهرست ثابت نیست، بلکه به شرایط واکنش نشان میدهد. دانشآموز در پایان درس میتواند یک شرط ساده بنویسد و توضیح دهد چه زمانی اجرا میشود و چه زمانی نه.
مفهوم برنامهنویسی: شرط و حسگر
شرط یا if، قلب هر برنامهی هوشمند است. وقتی بازی تشخیص میدهد شما برنده شدهاید یا گوشی میفهمد شارژ کم است، پشت آن یک شرط ساده قرار دارد. شرط همیشه یک پرسش بله یا خیر است و بدنهی آن فقط وقتی اجرا میشود که جواب بله باشد.
حسگر چیزی است که این پرسش را جواب میدهد. در روبی حسگرهای دیوار و آب مثل frontIsWall، leftIsWall، rightIsWall و frontIsWater وجود دارند. در این درس فقط frontIsWall به کار میرود تا کودک گیج نشود.
فعالیت قدمبهقدم با ربات روبی
در یک ماموریت نمونه، روبی چند قدم جلو میرود و به جایی میرسد که ممکن است دیوار باشد. برنامه اینطور نوشته میشود: repeat(3): forward، سپس if frontIsWall: turnRight و در آخر forward. اگر دیوار باشد روبی میچرخد، وگرنه مستقیم ادامه میدهد.
در حالت بلوکی، بلوک «❓ اگر» را میکشیم، حسگر frontIsWall را در جای شرط میگذاریم و بلوک «↻ راست» را داخل آن قرار میدهیم. ترکیب حلقه و شرط هم ممکن است: repeat(6): if frontIsWall: turnRight و بعد forward داخل همان حلقه، تا روبی در یک راهروی پیچدار خودش راهش را پیدا کند.
- ✅ حسگر را انتخاب کن: frontIsWall
- ✅ کاری که فقط در صورت وجود دیوار لازم است داخل اگر بگذار
- ✅ کارهای همیشگی را بیرون اگر بگذار
- ✅ روی نقشههای مختلف امتحان کن
اشتباههای رایج و راه رفعشان
رایجترین اشتباه، گذاشتن forward داخل اگر است؛ آنوقت روبی فقط وقتی دیوار هست جلو میرود و طبیعتاً به دیوار میخورد. اشتباه دیگر این است که کودک فکر میکند شرط همیشه بررسی میشود، در حالی که if فقط یک بار و در همان لحظه سؤال میپرسد.
برای رفع، برنامه را قدمبهقدم اجرا کنید و در هر قدم بپرسید «الان جلوی روبی دیوار است؟ پس کدام بلوک اجرا میشود؟». این تمرین سادهترین شکل اشکالزدایی است.
اشتباه سوم انتخاب جهت چرخش بدون نگاه به نقشه است؛ اگر راه باز سمت چپ باشد، turnRight روبی را به دیوار دیگری میرساند. از کودک بخواهید پیش از ساختن بلوک، روی نقشه با انگشت نشان دهد روبی بعد از دیدن دیوار باید به کدام سمت برود.
فعالیت بدون کامپیوتر: بازی اگر
بازی «اگر... آنوقت» را در کلاس اجرا کنید: «اگر لباست آبی است، دست بزن». بعد یک کودک چشمبسته نقش ربات روبی را بازی کند و همکلاسیاش فقط وقتی جلوی او میز یا دیوار است بگوید «دیوار!» تا ربات بچرخد. بچهها خیلی سریع میفهمند حسگر یعنی چه.
بعد از چند دور، نقشها را عوض کنید و از بچهها بپرسید اگر حسگر چیزی نگوید، ربات چه کار میکند. آنها متوجه میشوند که شرط فقط در یک لحظهی مشخص سؤال میپرسد و ربات بدون حسگر کور است. همین تجربه کمک میکند در اپ روبی بلوکها را با دقت بیشتری بچینند.
نکته برای معلم و والدین
از مثالهای روزمره استفاده کنید: «اگر باران آمد، چتر بردار». بعد بپرسید اگر باران نیامد چه میشود؟ این پرسش دقیقاً مقدمهی درس بعدی، یعنی if / else، است. در آکادمی روبی هر درس فقط بلوکهای لازم را نشان میدهد تا تمرکز روی همین یک مفهوم بماند.
یک تمرین خوب برای خانه این است که کودک سه جملهی «اگر... آنوقت» از زندگی روزمرهی خودش بنویسد و برای هر کدام بگوید شرط چیست و کار چیست. بعد یکی از آنها را به شکل کد روبی بازنویسی کند. این کار فاصلهی میان زبان روزمره و زبان برنامهنویسی را کم میکند و شرط if را به یک ابزار آشنا تبدیل میکند.
سوالهای پرتکرار
frontIsWall دقیقاً چه کاری میکند؟
حسگری است که بررسی میکند خانهی روبهروی ربات روبی دیوار است یا نه و جواب بله یا خیر برمیگرداند.
چرا در این درس فقط یک حسگر هست؟
برای اینکه کودک اول خود مفهوم شرط را بفهمد. حسگرهای دیگر مثل leftIsWall و frontIsWater در درسهای بعدی به کار میآیند.
آیا این همان if در پایتون است؟
بله، شکل کد if frontIsWall: در روبی به سبک پایتون نوشته شده و منطقش با if در پایتون واقعی یکی است.