Menu
CoddyTech

Motifs de dictionnaire

Fait partie de la section Logique et flux d’exécution du Journey GDScript de Coddy. Leçon 9 sur 78.

Un motif de dictionnaire liste des clés et les motifs auxquels leurs valeurs doivent correspondre. Il correspond à un dictionnaire qui possède exactement ces clés, quel que soit leur ordre :

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

La valeur de "type" doit être "move", et la valeur de "dir", quelle qu’elle soit, est stockée dans d. Un dictionnaire contenant une clé qui ne figure pas dans le motif ne correspond pas. Ajoute .. à la fin pour autoriser des clés supplémentaires :

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

Une clé écrite sans valeur vérifie uniquement que la clé existe : {"name", ..}: correspond à tout dictionnaire qui possède une clé "name". Les gardes fonctionnent aussi ici : {"type": "attack", "damage": var dmg} when dmg > 50:.

challenge icon

Défi

Facile

Le programme lit un événement de jeu écrit sous forme de paires key=value séparées par des virgules, comme type=move,dir=left, et le stocke dans le dictionnaire event (déjà écrit). Toutes les valeurs sont des chaînes.

Utilise une instruction match avec des motifs de dictionnaire, dans cet ordre :

  • Exactement les clés type ("move") et dir : affiche Moving et la direction
  • Exactement les clés type ("attack") et damage : affiche Taking , les dégâts et damage
  • type vaut "heal", avec toutes autres clés : affiche Healing
  • Tout autre dictionnaire avec une clé type : affiche Unknown event: et le type
  • Tout le reste : affiche Invalid event

Pour l’entrée type=attack,damage=30, la sortie est :

Taking 30 damage

Un événement tel que type=move,dir=up,speed=2 comporte une clé supplémentaire, donc il affiche Unknown event: move.

Essayez vous-même

extends Node

func _ready():
	var event := {}
	for pair in OS.read_string_from_stdin().split(","):
		var kv := pair.split("=")
		event[kv[0]] = kv[1]
	# Faire correspondre event aux motifs de dictionnaire
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Logique et flux d’exécution

Entraînez-vous par vous-même : Compilateur GDScript en ligne