حسگرهای آیتم و دست پر در روبی
دو پرسش ساده که جلوی خطای بردار و بگذار را میگیرند: «زیر پایم چیزی هست؟» و «دستم پر است؟».
این دو حسگر چه کار میکنند؟
onItem وقتی بله است که روی خانهی زیر پای روبی هر آیتمی باشد. holding وقتی بله است که روبی چیزی در دست داشته باشد؛ یعنی بعد از یک بردار موفق و قبل از بگذار.
یک نکتهی ظریف: onItem برای سبد، گلدان یا شخصیتهایی مثل گربه هم بله میگوید، اما اینها برداشتنی نیستند. پس onItem یعنی «چیزی اینجاست»، نه لزوما «میتوانم برش دارم».
شکل بلوکی و شکل کد
این حسگرها در حالت کد نوشته میشوند و چند اسم فارسی و انگلیسی دارند.
- ✅ آیتم زیر پا: onItem، on_item، item_here، gem_here، روی_آیتم، جواهر_اینجا
- ✅ دست پر: holding، isCarryingItem، دست_پر
یک مثال کوچک با ربات روبی
در یک ردیف هشتخانهای که بعضی خانهها جواهر دارند: repeat(8): و داخلش forward و if onItem: pickUp. روبی فقط جایی خم میشود که چیزی هست و برنامه هیچوقت با خطای «اینجا چیزی برای برداشتن نیست» متوقف نمیشود.
برای تحویل امن: if holding: putDown. اگر دست روبی خالی باشد، بگذار اجرا نمیشود و برنامه ادامه پیدا میکند.
ترکیب این دو حسگر یک ماموریت کامل میسازد: روبی در طول مسیر هر جا onItem بله بود آیتم را برمیدارد و در آخر، کنار سبد، فقط اگر holding بله بود آن را تحویل میدهد. چنین برنامهای روی نقشهای که جای آیتمهایش عوض شده هم کار میکند.
اشتباههای رایج
این دو حسگر خانهی زیر پا و دست روبی را میسنجند، نه خانهی جلو را.
- ✅ انتظار اینکه onItem آیتم جلو را ببیند؛ برای آن frontIsBeacon هست
- ✅ زدن بردار روی سبد چون onItem بله گفته
- ✅ پرسیدن holding قبل از هر بردار
در کدام درسها و لیگها استفاده میشود؟
ماموریتهای برداشتن و گذاشتن از درس ۵ و درس ۱۱ شروع میشوند و در ردهی ۳، از درس ۱۷ به بعد، این حسگرها آنها را هوشمند میکنند. حسگر holding در تمرینهای هر چهار لیگ روبی دیده میشود.
نکته برای والدین و معلم
از کودک بپرسید «اگر این خانه خالی بود، برنامهات چه میکرد؟». فکر کردن به حالتهای مختلف، پایهی برنامهنویسی دفاعی و بدون خطاست.
این عادت در پروژههای بزرگتر هم ارزشمند است؛ برنامهنویس خوب همیشه میپرسد اگر دادهای نبود یا شرایط عوض شد، برنامه چه میکند.
سوالهای پرتکرار
onItem به فارسی چیست؟
روی_آیتم یا جواهر_اینجا.
holding کی بله میگوید؟
وقتی روبی بعد از یک بردار موفق چیزی در دست دارد و هنوز آن را نگذاشته.
چرا onItem بله گفت ولی بردار خطا داد؟
آیتم آن خانه احتمالا سبد، گلدان یا یک شخصیت بوده که برداشتنی نیست.