Menu
Coddy logo textTech

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

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

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

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

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

print(Status.Active) -- 2

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

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

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

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

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

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

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

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

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