حسگر «نشونه» در روبی: آیتم را از دور ببین
ربات روبی میتواند قبل از رسیدن به یک جواهر یا شیء، وجودش را در خانهی کناری تشخیص دهد.
حسگر نشونه چه کار میکند؟
frontIsBeacon وقتی بله است که خانهی جلوی روبی داخل نقشه باشد و هر آیتمی روی آن باشد؛ جواهر، توپ، جعبه یا حتی یک سبد و شخصیت. leftIsBeacon و rightIsBeacon همین را برای سمت چپ و راست روبی میپرسند.
اسمهای frontIsDiamond و frontIsItem هم همین حسگرند. این حسگر فقط وجود آیتم را میگوید، نه برداشتنی بودن آن را؛ پس بعد از رسیدن به خانه، اگر آیتم سبد یا شخصیت باشد، دستور بردار خطا میدهد.
حسگر نشونه فقط یک خانه جلوتر را میبیند و به دورتر کاری ندارد. برای همین معمولا در هر قدم داخل یک حلقه پرسیده میشود تا روبی همیشه از خانهی بعدی خبر داشته باشد.
شکل بلوکی و شکل کد
در فهرست کشویی بلوکهای اگر و تا_وقتی با اسمهای جلو_نشونه، راست_نشونه و چپ_نشونه دیده میشود.
- ✅ جلو: frontIsBeacon، frontIsDiamond، frontIsItem، جلو_نشونه
- ✅ چپ: leftIsBeacon یا چپ_نشونه
- ✅ راست: rightIsBeacon یا راست_نشونه
یک مثال کوچک با ربات روبی
در یک ردیف که بعضی خانههایش جواهر دارند: repeat(6): و داخلش if frontIsBeacon: forward و pickUp، else: forward. روبی هر جا آیتم جلویش ببیند، جلو میرود و آن را برمیدارد. با elif هم میتوان این حسگر را کنار حسگر دیوار گذاشت: if frontIsWall: right، elif frontIsBeacon: forward و pickUp، else: forward.
اشتباههای رایج
نشونه یعنی آیتم در خانهی کناری؛ برای آیتم زیر پا حسگر دیگری به نام onItem وجود دارد.
- ✅ زدن بردار بدون جلو رفتن بعد از دیدن نشونه
- ✅ قاطی کردن frontIsBeacon با onItem
- ✅ انتظار اینکه حسگر فقط جواهر را تشخیص دهد
در کدام درسها و لیگها استفاده میشود؟
این حسگر در ردهی ۳ طرح درس کنار شرطهای درس ۱۷ «اگر... وگرنه» به کار میآید و در پروژهی باز درس ۲۳ برای جمع کردن آیتمها بدون نقشهی از پیششمردهشده مفید است. در تمرینهای لیگ ۴ هم استفاده شده است.
نکته برای والدین و معلم
برنامهای که با حسگر نشونه نوشته شده، روی هر چیدمانی از جواهرها کار میکند. چیدمان را عوض کنید و نشان دهید برنامه هنوز درست است؛ این بهترین تشویق برای فکر کردن الگوریتمی است. بعد بپرسید اگر جواهرها در ستون کناری بودند، کدام حسگر را باید عوض کرد.
سوالهای پرتکرار
frontIsBeacon سبد را هم تشخیص میدهد؟
بله، هر آیتمی روی خانه باشد جواب بله میدهد؛ اما سبد برداشتنی نیست.
فرق frontIsBeacon و onItem چیست؟
frontIsBeacon خانهی جلو را میبیند و onItem خانهی زیر پای روبی را.
اسم فارسی این حسگر چیست؟
جلو_نشونه؛ برای چپ و راست هم چپ_نشونه و راست_نشونه.