Menu
CoddyTech

תנאי הגנה

חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-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 משמש כשומר עבור איבר אחד: הוא מדלג על איבר לא תקין והלולאה ממשיכה לאיבר הבא.

challenge icon

אתגר

קל

כתבו את הפונקציה process_data. היא מקבלת מחרוזת text ומחזירה מחרוזת:

  1. אם text אינו מספר שלם, החזירו Input must be a number!
  2. אם המספר הוא 0, החזירו Cannot divide by zero!
  3. אחרת, חלקו את 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
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה לוגיקה וזרימת תוכנית

תרגלו בעצמכם: קומפיילר GDScript אונליין