תנאי הגנה
חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-GDScript של Coddy. שיעור 68 מתוך 78.
כשפונקציה צריכה לבצע כמה בדיקות, קינון של if בתוך אחר דוחף את העבודה האמיתית עמוק יותר ויותר:
func buy(gold: int, price: int) -> String:
if price > 0:
if gold >= price:
return "Bought! %d gold left" % (gold - price)
else:
return "Not enough gold"
else:
return "Invalid price"תנאי שמירה הופך את המצב. הוא בודק מקרה לא תקין אחד בתחילת הפונקציה ומיד יוצא באמצעות return. הקוד שאחרי תנאי השמירה רץ רק עם ערכים תקינים, ואין צורך בקינון:
func buy(gold: int, price: int) -> String:
if price <= 0:
return "Invalid price"
if gold < price:
return "Not enough gold"
return "Bought! %d gold left" % (gold - price)buy(50, 30) מחזירה Bought! 20 gold left, buy(10, 30) מחזירה Not enough gold ו-buy(50, 0) מחזירה Invalid price.
סדר תנאי ההגנה חשוב: תנאי ההגנה שמגן על שורה חייב להופיע לפניה. בדקו את הטקסט באמצעות is_valid_int() לפני שתשתמשו במספר, ובדקו אם הערך הוא אפס לפני שתחלקו:
func share(coins: int, players: int) -> int:
if players <= 0:
return 0
return coins / playersבפונקציה מסוג -> void, שומר הוא return בפני עצמו. בתוך לולאה, continue משמש כשומר עבור איבר אחד: הוא מדלג על איבר לא תקין והלולאה ממשיכה לאיבר הבא.
אתגר
קלכתבו את הפונקציה process_data. היא מקבלת מחרוזת text ומחזירה מחרוזת:
- אם
textאינו מספר שלם, החזירוInput must be a number! - אם המספר הוא
0, החזירוCannot divide by zero! - אחרת, חלקו את
100.0במספר והחזירו את התוצאה עם שתי ספרות אחרי הנקודה העשרונית
לדוגמה, process_data("8") מחזירה 12.50, process_data("-5") מחזירה -20.00 ו־process_data("abc") מחזירה Input must be a number!.
כתבו את שתי הבדיקות כתנאי יציאה (guard clauses) בראש הפונקציה.
נסו בעצמכם
func process_data(text: String):
# כתבו כאן קוד
pass
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת תוכנית
2קבלת החלטות מתקדמת
התאמה עם משתניםתנאי סף להתאמהתבניות מערכיםתבניות מילוניםבדיקות חברותסיכום – מנתח פקודות5אפליקציית ספר אנשי קשר
הצגת התפריטהוספת איש קשר8מנהל רשומות תלמידים
סקירת הפרויקטהוספת תלמידתרגלו בעצמכם: קומפיילר GDScript אונליין