Menu
CoddyTech

תבניות מילונים

חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-GDScript של Coddy. שיעור 9 מתוך 78.

תבנית מילון מציינת מפתחות ואת התבניות שעל הערכים שלהם להתאים להן. היא מתאימה למילון שיש בו בדיוק את המפתחות האלה, בכל סדר שהוא:

var event := {"type": "move", "dir": "left"}
match event:
	{"type": "jump"}:
		print("Jump!")
	{"type": "move", "dir": var d}:
		print("Moving ", d)
Moving left

הערך של "type" חייב להיות "move", והערך של "dir", יהיה אשר יהיה, נשמר ב־d. מילון עם מפתח שאינו מופיע בתבנית אינו תואם. הוסף .. בסוף כדי לאפשר מפתחות נוספים:

var hit := {"type": "attack", "damage": 30, "crit": true}
match hit:
	{"type": "attack", "damage": _}:
		print("Exactly two keys")
	{"type": "attack", "damage": var dmg, ..}:
		print("Hit for ", dmg)
Hit for 30

מפתח שנכתב ללא ערך רק בודק שהמפתח קיים: {"name", ..}: מתאים לכל מילון שיש בו מפתח "name". אפשר להשתמש כאן גם בתנאי שמירה: {"type": "attack", "damage": var dmg} when dmg > 50:.

challenge icon

אתגר

קל

התוכנית קוראת אירוע משחק שנכתב כזוגות key=value המופרדים בפסיקים, כגון type=move,dir=left, ושומרת אותו במילון event (שכבר נכתב). כל הערכים הם מחרוזות.

השתמשו במשפט match עם תבניות מילון, בסדר הבא:

  • בדיוק המפתחות type ("move") ו-dir: הדפיסו Moving ואת הכיוון
  • בדיוק המפתחות type ("attack") ו-damage: הדפיסו Taking , את הנזק ואת damage
  • type הוא "heal", עם כל מפתח אחר: הדפיסו Healing
  • כל מילון אחר עם מפתח type: הדפיסו Unknown event: ואת הסוג
  • כל דבר אחר: הדפיסו Invalid event

עבור הקלט type=attack,damage=30, הפלט הוא:

Taking 30 damage

אירוע כגון type=move,dir=up,speed=2 כולל מפתח נוסף, ולכן הוא מדפיס Unknown event: move.

נסו בעצמכם

extends Node

func _ready():
	var event := {}
	for pair in OS.read_string_from_stdin().split(","):
		var kv := pair.split("=")
		event[kv[0]] = kv[1]
	# בדוק התאמה של event לתבניות מילון
quiz iconבחנו את עצמכם

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

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

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