מהו טיפול בשגיאות?
חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-GDScript של Coddy. שיעור 66 מתוך 78.
תוכנית יכולה להיעצר באמצע בגלל שגיאה. הקוד הזה מבקש את משבצת 5 במערך שיש בו רק שלושה איברים:
var inventory := ["sword", "shield", "potion"]
var slot := 5
print(inventory[slot])
print("Done")Godot מדווח על Out of bounds get index '5' והפונקציה נעצרת בשורה הזאת, ולכן Done אף פעם לא מודפס. זוהי שגיאת זמן ריצה: הקוד תקין, אבל ערך שהוא מקבל בזמן הריצה גורם לכך שאי אפשר להריץ שורה אחת.
שגיאות זמן הריצה הנפוצות ביותר הן:
- חלוקת מספר שלם באפס, כמו ב־
10 / countכאשרcountהוא0(אותו הדבר גם לגבי%) - קריאת מפתח חסר באמצעות סוגריים מרובעים, כמו ב־
player["mana"] - אינדקס מחוץ למערך, כמו
inventory[5]שלמעלה
Python ו-Java יכולים ללכוד שגיאה לאחר שהיא מתרחשת, בעזרת try ו-except או catch. ל-GDScript אין חריגות ואין try. טיפול בשגיאות ב-GDScript פירושו לבדוק את הערכים לפני השורה שעלולה להיכשל, ולהחליט מה לעשות במקום:
if slot >= 0 and slot < inventory.size():
print(inventory[slot])
else:
print("Slot ", slot, " is empty")הבדיקה צריכה את שני החלקים. אינדקס שלילי כמו -1 אינו שגיאה: הוא קורא מהסוף של המערך, וזה לא מה שמספר של משבצת מציין.
כשהשגיאה מתרחשת בתוך פונקציה שקראת לה, הפונקציה נעצרת ומחזירה ערך ריק, כמו 0 או null, והפונקציה הקוראת ממשיכה עם הערך השגוי הזה. טעויות מסוימות גורמות להחזרת ערך שגוי בלי שגיאה: int("abc") הוא 0.
אתגר
קללמערך inventory יש ארבעה מקומות, שממוספרים החל מ־0. התוכנית קוראת שורת קלט אחת: מספר של מקום (מספר שלם, שיכול להיות שלילי).
אם המקום קיים, יש להדפיס Slot , את המספר, את : ואת הפריט. עבור הקלט 2, הפלט הוא:
Slot 2: potionאחרת, יש להדפיס Slot , את המספר ואת is empty. עבור הקלט 7, הפלט הוא:
Slot 7 is emptyמספר שלילי לעולם אינו מספר של מקום: עבור -1, יש להדפיס Slot -1 is empty. התוכנית לעולם לא אמורה להסתיים בשגיאה.
נסו בעצמכם
extends Node
func _ready():
var inventory := ["sword", "shield", "potion", "bow"]
var slot := int(OS.read_string_from_stdin())
# הדפס את הפריט שבמשבצת, או ציין שהמשבצת ריקה
pass
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת תוכנית
2קבלת החלטות מתקדמת
התאמה עם משתניםתנאי סף להתאמהתבניות מערכיםתבניות מילוניםבדיקות חברותסיכום – מנתח פקודות5אפליקציית ספר אנשי קשר
הצגת התפריטהוספת איש קשר8מנהל רשומות תלמידים
סקירת הפרויקטהוספת תלמידתרגלו בעצמכם: קומפיילר GDScript אונליין