Menu
CoddyTech

Patrones de diccionarios

Parte de la sección Lógica y flujo del Journey de GDScript de Coddy. Lección 9 de 78.

Un patrón de diccionario enumera las claves y los patrones con los que deben coincidir sus valores. Coincide con un diccionario que tiene exactamente esas claves, en cualquier orden:

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

El valor de "type" debe ser "move", y el valor de "dir", sea cual sea, se almacena en d. Un diccionario con una clave que el patrón no enumera no coincide. Añade .. al final para permitir claves adicionales:

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

Una clave escrita sin un valor solo comprueba que la clave existe: {"name", ..}: coincide con cualquier diccionario que tenga una clave "name". Las guardas también funcionan aquí: {"type": "attack", "damage": var dmg} when dmg > 50:.

challenge icon

Desafío

Fácil

El programa lee un evento del juego escrito como pares key=value separados por comas, como type=move,dir=left, y lo almacena en el diccionario event (ya escrito). Todos los valores son cadenas.

Usa una instrucción match con patrones de diccionario, en este orden:

  • Exactamente las claves type ("move") y dir: imprime Moving y la dirección
  • Exactamente las claves type ("attack") y damage: imprime Taking , el daño y damage
  • type es "heal", con cualquier otra clave: imprime Healing
  • Cualquier otro diccionario con una clave type: imprime Unknown event: y el tipo
  • Cualquier otra cosa: imprime Invalid event

Para la entrada type=attack,damage=30, la salida es:

Taking 30 damage

Un evento como type=move,dir=up,speed=2 tiene una clave adicional, así que imprime Unknown event: move.

Pruébalo tú mismo

extends Node

func _ready():
	var event := {}
	for pair in OS.read_string_from_stdin().split(","):
		var kv := pair.split("=")
		event[kv[0]] = kv[1]
	# Compara event con patrones de diccionario
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Lógica y flujo

Practica por tu cuenta: Compilador de GDScript online