Menu
CoddyTech
flag Ar iconالعربيةdown icon

أنماط القواميس

جزء من قسم المنطق وتدفّق التنفيذ في رحلة 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 عبر الإنترنت