חיות קטנות על הכביש
TinkerBott ממשיך לנסוע לאורך הקו השחור — וכשהוא מגיע לאזור המגורים, חיות קטנות מופיעות לפתע לפניו.
כדי לא לפגוע בהן, הרובוט חייב לעצור בזמן.
המפקח לומי אומר: "צריך שהרובוט יידע לבצע כמה משימות במקביל: גם לעקוב אחרי הקו וגם להימנע ממכשולים. זו נהיגה חכמה."
ואתם שואלים את השאלה הנכונה: "מה הוא צריך לעשות קודם — לעקוף מכשולים או לעקוב אחרי הקו?"
לומי מחייך. "שאלה מצוינת. כשיש כמה משימות בו-זמנית, צריך לקבוע להן סדר עדיפויות."
הידע שצריך
קבלת החלטות בנהיגה חכמה
זהו הלב של טכנולוגיית הנהיגה האוטונומית: אחרי שהרכב חש את הסביבה, הוא בוחר התנהגות בטוחה והגיונית — בדיוק כמו נהג אנושי שמקבל החלטות כל הזמן.
והכלל הראשון בנהיגה הוא תמיד אותו כלל: בטיחות קודמת לכל.
לכן סדר העדיפויות כאן ברור:
- עקיפת מכשולים — עדיפות ראשונה
- עקיבת קו — עדיפות שנייה
הרובוט יבדוק קודם אם יש מכשול. רק אם אין — הוא יעסוק בקו.
הרעיון החדש: פונקציות
בשיעור הזה יש שתי התנהגויות שלמות שכבר בניתם בשיעורים קודמים. אם תדחפו את שתיהן לתוך לולאה אחת, תקבלו ערימת אבנים בלתי קריאה.
פונקציה היא קטע קוד עם שם, שאפשר לקרוא לו שוב ושוב. זה משפר את הקריאוּת, את התחזוקה ואת האפשרות לעשות שימוש חוזר בקוד.
במקום ערימה אחת ענקית, נארוז את עקיפת המכשולים בפונקציה אחת ואת עקיבת הקו בפונקציה שנייה — ובתוכנית הראשית פשוט נקרא להן לפי סדר העדיפויות.
לפונקציה שני חלקים:
- הגדרה — כותבים פעם אחת מה הפונקציה עושה
- קריאה — משתמשים בה בכל מקום שצריך, בשורה אחת
משימה: לעקוב אחרי הקו ולעצור למכשולים
הרובוט נוסע לאורך הקו השחור. כשמופיע מכשול — הוא עוצר. כשהמכשול מוסר — הוא ממשיך.
תרשים הזרימה

אבני הפונקציות

Make a Function — יוצרים פונקציה ונותנים לה שם. תנו שם שמסביר מה היא עושה, למשל עקיפה או עקיבה.

function doSomething — כאן כותבים את גוף הפונקציה. השם ניתן לשינוי.

return — מחזירה ערך מהפונקציה אל מי שקרא לה.

call — מפעילה פונקציה שהגדרתם.
התוכנית

הסתכלו על התוכנית הראשית: היא קצרה ומובנת, כי כל המורכבות ארוזה בתוך שתי הפונקציות. זו בדיוק המטרה.
מריצים
הניחו את הרובוט על הקו והדליקו. הוא יתחיל לעקוב אחרי הקו. עכשיו שימו יד או חפץ לפניו — הוא אמור לעצור. הסירו — והוא ימשיך מאיפה שהפסיק.

המטרה נעלמת
הרובוט שילב בהצלחה עקיבת קו ועקיפת מכשולים והשלים את הקטע.
ואז — רכב המטרה מבצע פנייה חדה ונעלם. נשארו רק סימני צמיגים על הקרקע.
מצב עקיבת הקו כבר לא עוזר. נראה שהצד השני הבין שעוקבים אחריו לאורך הקו השחור.
נסו בעצמכם
- הפכו את סדר העדיפויות: קודם עקיבת קו ואז מכשולים. מה קורה כשמכשול מופיע בפנייה?
- הוסיפו פונקציה שלישית — אזעקה — וקראו לה כשיש מכשול.
- במקום לעצור, גרמו לרובוט לעקוף את המכשול ולחזור לקו. זה הרבה יותר קשה — למה?
- כמה שורות יש בתוכנית הראשית שלכם? נסו לקצר אותה עוד, בעזרת פונקציה נוספת.


