Menu
CoddyTech

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) # 5

enum自体は、名前から値への辞書のように機能します。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]) # 4

for day_name in Day: は、辞書をループするときのように、名前を順にループします。

challenge icon

チャレンジ

簡単

このスクリプトは、MONDAYからSUNDAYまでの列挙型Dayを宣言します。プログラムは2行を読み取ります。大文字で表記された曜日の名前と、日数(0以上の整数)です。

次の2行を出力します。

  1. 曜日の名前、has the value、および列挙型におけるその曜日の値
  2. 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
quiz icon腕試し

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

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

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