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 です。この関数は、列挙型と同じようにトップレベルで宣言されています。
チャレンジ
簡単このスクリプトでは、選択肢として 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]))
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
ロジックとフローのすべてのレッスン
自分で練習してみよう: GDScriptオンラインコンパイラ