Menu
Coddy logo textTech

Паттерн перечислений (Enum) в Luau

Часть раздела Введение в Luau путешествия по Lua на Coddy. Урок 51 из 73.

Программы полны значений, выбранных из небольшого фиксированного набора: заказ находится в состоянии ожидания, отправлен или доставлен; игрок смотрит вверх, вниз, влево или вправо. Во многих языках для этого есть ключевое слово enum. В Luau его нет, и оно не нужно, потому что две уже знакомые тебе возможности справляются с этой задачей.

Шаблон 1: таблица констант. Обычная таблица сопоставляет понятные имена со значениями, заменяя «магические числа», разбросанные по коду:

local Status = {
    Pending = 1,
    Active = 2,
    Done = 3,
}

print(Status.Active) -- 2

Это настоящее значение во время выполнения: ты можешь прочитать Status.Active, сравнить с ним и передавать его дальше — совсем как таблицы, которые ты использовал до сих пор.

Шаблон 2: объединение литеральных типов. Тип, состоящий из точных строковых значений и использующий литеральные типы, с которыми ты познакомился в главе об объединениях:

type Color = "red" | "green" | "blue"
local favorite: Color = "green" -- ✓
local oops: Color = "yellow"    -- ✗ type error

Объединение существует только для средства проверки типов и не имеет затрат во время выполнения, но оно гарантирует, что переменная не сможет содержать значение за пределами набора. Эти два шаблона дополняют друг друга: таблица предоставляет тебе значения во время выполнения под одним именем, а объединение даёт гарантию на этапе компиляции. Позже в этой главе ты также познакомишься с table.freeze, который защищает таблицу констант от изменения во время выполнения.

Попробуйте сами

В этом уроке нет задания по программированию.

quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Введение в Luau

Потренируйтесь самостоятельно: Онлайн-компилятор Lua