Menu
CoddyTech

matchでのEnumの使用

CoddyのGDScriptジャーニー「ロジックとフロー」セクションの一部。レッスン 40/78。

match文は、値を列挙型の選択肢と比較できます。各パターンは選択肢で、列挙型名を付けて記述します。

enum Light { RED, YELLOW, GREEN }

func _ready():
	var light := Light.YELLOW
	match light:
		Light.RED:
			print("Stop")
		Light.YELLOW:
			print("Slow down")
		Light.GREEN:
			print("Go")

これはSlow downを出力します。すべてのmatchと同様に、複数の選択肢をカンマで区切って1つの分岐にまとめることができ、_はそれ以外のすべてに一致します:

match light:
	Light.RED, Light.YELLOW:
		print("Wait")
	_:
		print("Go")

値を返す関数では、すべての経路にreturnが必要です。分岐ですべての選択肢を網羅している場合でも、matchに_分岐があるか、その後にreturnが続かない限り、GDScriptはNot all code paths return a valueと報告します。

func next_light(light: Light) -> Light:
	match light:
		Light.RED:
			return Light.GREEN
		Light.GREEN:
			return Light.YELLOW
		_:
			return Light.RED

パラメーターと戻り値の型は、列挙型の Light です。この関数は、列挙型と同じようにトップレベルで宣言されています。

challenge icon

チャレンジ

簡単

このスクリプトでは、選択肢として IDLE、WALK、RUN、JUMP、FALL を持つ列挙型 State を宣言しています。関数 describe() を完成させてください。この関数は状態を受け取り、match を使って選ばれた説明を返します。

  • State.IDLE: "Standing still"
  • State.WALK と State.RUN: "Moving"
  • State.JUMP と State.FALL: "In the air"

WALK と RUN には1つの分岐を使い、JUMP と FALL にも1つの分岐を使ってください。与えられた _ready() 内のコードは、状態名の行を読み取り、それぞれの状態名と説明を出力します。入力が IDLE RUN FALL の場合、出力は次のとおりです。

IDLE: Standing still
RUN: Moving
FALL: In the air

自分で試してみよう

extends Node

enum State { IDLE, WALK, RUN, JUMP, FALL }

func describe(state: State):
	# matchを使ってstateの説明を返す
	pass

func _ready():
	var names := OS.read_string_from_stdin().split(" ", false)
	for state_name in names:
		print(state_name, ": ", describe(State[state_name]))
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

ロジックとフローのすべてのレッスン

自分で練習してみよう: GDScriptオンラインコンパイラ