Menu
CoddyTech

Enums в match

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

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

Функция, которая возвращает значение, должна содержать return на каждом пути выполнения. Даже если ветви охватывают все варианты, GDScript сообщает Not all code paths return a value, если в match нет ветви _ или после него нет return:

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

Параметр и возвращаемый тип — это перечисление Light. Функция объявлена на верхнем уровне, как и перечисление.

challenge icon

Задание

Легко

Скрипт объявляет перечисление State с вариантами IDLE, WALK, RUN, JUMP и FALL. Завершите функцию describe(): она получает состояние и возвращает его описание, выбранное с помощью match:

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

Используйте одну ветвь для WALK и RUN и одну для JUMP и FALL. Данный код в _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
	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