Enumの値
CoddyのGDScriptジャーニー「ロジックとフロー」セクションの一部。レッスン 39/78。
列挙型の各選択肢はintなので、選択肢を比較したり、それらを使って計算したりできます。
enum Day { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY }
func _ready():
print(Day.FRIDAY) # 4
print(Day.SATURDAY > Day.FRIDAY) # true
print(Day.FRIDAY + 1) # 5enum自体は、名前から値への辞書のように機能します。keys()は名前を順番に返し、values()は値を、size()は選択肢の数を返します:
print(Day.keys()) # ["MONDAY", "TUESDAY", ..., "SUNDAY"]
print(Day.size()) # 7値の名前を出力するには、その値を使ってkeys()をインデックス指定します。これは、オプションにデフォルト値0、1、2... が設定されている場合に機能します。値を独自に選んだ列挙型では、値の名前を返すfind_key()を使います。
var today := Day.SATURDAY
print(Day.keys()[today]) # SATURDAYトップレベルに enum Coin { COPPER = 1, SILVER = 10 } がある場合、Coin.keys()[10] は範囲外ですが、find_key() は機能します。
print(Coin.find_key(10)) # SILVER逆に、テキストとして保存された名前からその値を取得するには、角括弧を使います。まず has() で名前を確認します。enum にない名前はエラーになります。
var text := "FRIDAY"
if Day.has(text):
print(Day[text]) # 4for day_name in Day: は、辞書をループするときのように、名前を順にループします。
チャレンジ
簡単このスクリプトは、MONDAYからSUNDAYまでの列挙型Dayを宣言します。プログラムは2行を読み取ります。大文字で表記された曜日の名前と、日数(0以上の整数)です。
次の2行を出力します。
- 曜日の名前、
has the value、および列挙型におけるその曜日の値 In、日数、days:、およびその日数後の曜日の名前
SUNDAYの後は、週が再びMONDAYから始まります。入力がFRIDAYと3の場合、出力は次のとおりです。
FRIDAY has the value 4
In 3 days: MONDAY自分で試してみよう
extends Node
enum Day { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY }
func _ready():
var day_name := OS.read_string_from_stdin()
var days := int(OS.read_string_from_stdin())
# その日の値と、指定された日数後の日の値を出力する
pass
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
ロジックとフローのすべてのレッスン
自分で練習してみよう: GDScriptオンラインコンパイラ