Menu
CoddyTech

Padrões de Dicionário

Parte da seção Lógica e fluxo do Journey de GDScript da Coddy. Lição 9 de 78.

Um padrão de dicionário lista as chaves e os padrões que seus valores devem corresponder. Ele corresponde a um dicionário que tem exatamente essas chaves, em qualquer ordem:

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

O valor de "type" deve ser "move", e o valor de "dir", seja qual for, é armazenado em d. Um dicionário com uma chave que não está listada no padrão não corresponde. Adicione .. no final para permitir chaves extras:

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

Uma chave escrita sem um valor verifica apenas se a chave existe: {"name", ..}: corresponde a qualquer dicionário que tenha uma chave "name". As guardas também funcionam aqui: {"type": "attack", "damage": var dmg} when dmg > 50:.

challenge icon

Desafio

Fácil

O programa lê um evento de jogo escrito como pares key=value separados por vírgulas, como type=move,dir=left, e o armazena no dicionário event (já escrito). Todos os valores são strings.

Use uma instrução match com padrões de dicionário, nesta ordem:

  • Exatamente as chaves type ("move") e dir: imprima Moving e a direção
  • Exatamente as chaves type ("attack") e damage: imprima Taking , o dano e damage
  • type é "heal", com quaisquer outras chaves: imprima Healing
  • Qualquer outro dicionário com uma chave type: imprima Unknown event: e o tipo
  • Qualquer outra coisa: imprima Invalid event

Para a entrada type=attack,damage=30, a saída é:

Taking 30 damage

Um evento como type=move,dir=up,speed=2 tem uma chave extra, então imprime Unknown event: move.

Experimente você mesmo

extends Node

func _ready():
	var event := {}
	for pair in OS.read_string_from_stdin().split(","):
		var kv := pair.split("=")
		event[kv[0]] = kv[1]
	# Verifique se event corresponde aos padrões de dicionário
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Lógica e fluxo

Pratique por conta própria: Compilador de GDScript online