Menu
CoddyTech

辞書パターン

CoddyのGDScriptジャーニー「ロジックとフロー」セクションの一部。レッスン 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オンラインコンパイラ