Что такое Enum?
Часть раздела Логика и потоки выполнения путешествия по GDScript на Coddy. Урок 37 из 78.
Некоторые значения могут принимать только один из нескольких вариантов: светофор горит красным, жёлтым или зелёным, а игрок бездействует, бежит или прыгает. Можно хранить вариант в виде числа: 0 для бездействия и 1 для бега, но тогда каждому читателю придётся запоминать, что означает каждое число:
var state := 1
if state == 1:
print("Running")Перечисление (сокращение от «перечисление») присваивает каждому варианту имя. GDScript нумерует имена за тебя, начиная с 0:
enum State { IDLE, RUN, JUMP }Теперь ты пишешь State.RUN вместо 1: имя перечисления, точку и вариант. Код говорит сам за себя:
var state := State.RUN
if state == State.RUN:
print("Running")Перечисление объявляется на верхнем уровне скрипта, рядом с func _ready():, а не внутри него. Строка enum внутри функции — это ошибка, из-за которой программа останавливается до запуска:
extends Node
enum State { IDLE, RUN, JUMP }
func _ready():
var state := State.JUMP
print(state) # 2Варианты — это константы, поэтому State.RUN = 5 — ошибка. Опечатка в названии варианта, например State.RUNN, обнаруживается до запуска программы, а неправильное число, например 3 вместо 2, остаётся незамеченным.
Задание
ЛегкоПрограмма считывает целое число от 0 до 3, которое обозначает погоду. Дай числам имена с помощью enum и выведи рекомендацию.
- На верхнем уровне скрипта объяви enum с именем
Weatherи вариантамиSUNNY,CLOUDY,RAINYиSNOWYименно в таком порядке. - Сравни
weatherс вариантами enum (а не с числами) и выведи одну строку:
Weather.SUNNY:Wear sunglassesWeather.CLOUDY:Bring a jacketWeather.RAINY:Take an umbrellaWeather.SNOWY:Build a snowman
Для входных данных 2 вывод будет таким:
Take an umbrellaПопробуйте сами
extends Node
# Объявите здесь перечисление Weather
func _ready():
var weather := int(OS.read_string_from_stdin())
# Сравните weather с вариантами перечисления и выведите совет
pass
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и потоки выполнения
1Строки: углублённое изучение
Методы строкПоиск в строкахЗамена и обрезка пробеловРазделение и объединениеПовторение — проверка имени пользователя4Словари. Часть 2
Вложенные словариМассивы словарейОбъединение словарейКопирование словарейПовторение — подсчёт частоты10Продвинутые функции
Возврат нескольких значенийЛямбда-функции. Часть 1Лямбда-функции. Часть 2Повторение — сортировка с помощью лямбда-функцииРекурсивные функции. Часть 1Рекурсивные функции. Часть 2Повторение — сумма вложенного массива13Система управления запасами
Обзор проектаДобавление товара2Продвинутое управление ветвлением
Сопоставление с переменнымиУсловия в шаблонахШаблоны массивовШаблоны словарейПроверка принадлежностиИтоги — парсер команд5Приложение «Телефонная книга»
Показать менюДобавить контакт8Менеджер успеваемости студентов
Обзор проектаДобавить студента3Многомерные массивы
Основы двумерных массивовДоступ к элементам двумерного массиваВложенные циклы с двумерными массивамиПовторение: двумерные массивыРваные массивыТипичные шаблоны работы с двумерными массивамиПовторение: игровое поле6Множества и словари
Что такое множество?Словарь как множествоДобавление и удалениеОбъединение и пересечениеРазность множествПовторение — удаление дубликатовПотренируйтесь самостоятельно: Онлайн-компилятор GDScript