Menu
CoddyTech

Значения Enum

Часть раздела Логика и потоки выполнения путешествия по GDScript на Coddy. Урок 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

Само перечисление работает как словарь, сопоставляющий имена и значения. 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(): имя, которого нет в перечислении, вызовет ошибку.

var text := "FRIDAY"
if Day.has(text):
	print(Day[text]) # 4

for day_name in Day: перебирает названия, как цикл по словарю.

challenge icon

Задание

Легко

Скрипт объявляет перечисление Day от MONDAY до SUNDAY. Программа считывает две строки: название дня заглавными буквами и количество дней (целое число, 0 или больше).

Выведите две строки:

  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