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 leftLa 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 30Une 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:.
Défi
FacileLe 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") etdir: afficheMovinget la direction - Exactement les clés
type("attack") etdamage: afficheTaking, les dégâts etdamage typevaut"heal", avec toutes autres clés : afficheHealing- Tout autre dictionnaire avec une clé
type: afficheUnknown event:et le type - Tout le reste : affiche
Invalid event
Pour l’entrée type=attack,damage=30, la sortie est :
Taking 30 damageUn é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
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
1Les chaînes de caractères en profondeur
Méthodes des chaînesRechercher dans les chaînesRemplacer et supprimer les espacesDécouper et joindreRécapitulatif - Vérifier un nom d’utilisateur4Dictionnaires, partie 2
Dictionnaires imbriquésTableaux de dictionnairesFusionner des dictionnairesCopier des dictionnairesRécapitulatif - Compteur de fréquence7Énumérations
Qu’est-ce qu’une énumération ?Définir une énumérationValeurs d’une énumérationÉnumérations avec matchRécapitulatif - Feu de circulation10Fonctions avancées
Renvoyer plusieurs valeursFonctions lambda, partie 1Fonctions lambda, partie 2Récapitulatif - Tri avec lambdaFonctions récursives, partie 1Fonctions récursives, partie 2Récapitulatif - Somme d’un tableau imbriqué13Système de gestion des stocks
Présentation du projetAjouter un article2Prise de décision avancée
Correspondance avec des variablesGardes de correspondanceMotifs de tableauMotifs de dictionnaireVérifications d’appartenanceRécapitulatif – Analyseur de commandes5Application de carnet d’adresses
Afficher le menuAjouter un contact8Gestionnaire des dossiers étudiants
Aperçu du projetAjouter un étudiant3Tableaux multidimensionnels
Bases des tableaux 2DAccéder aux éléments d’un tableau 2DBoucles imbriquées avec des tableaux 2DRécapitulatif - Tableaux 2DTableaux irréguliersMotifs courants des tableaux 2DRécapitulatif - Plateau de jeu6Les ensembles avec les dictionnaires
Qu’est-ce qu’un ensemble ?Un dictionnaire comme ensembleAjouter et supprimerUnion et intersectionDifférence d’ensemblesRécapitulatif – Supprimer les doublons9Agrégation avancée de données
Additionner des valeursTrouver le minimum et le maximumTri personnaliséRécapitulatif - Trieur de dictionnairesEntraînez-vous par vous-même : Compilateur GDScript en ligne