Menu
CoddyTech

Wzorzec enumów w Luau

Część sekcji Wprowadzenie do Luau ścieżki Lua w Coddy. Lekcja 55 z 80.

Programy są pełne wartości pochodzących z niewielkiego, ustalonego zbioru: zamówienie ma status oczekujące, wysłane lub dostarczone; gracz jest skierowany w górę, w dół, w lewo lub w prawo. Wiele języków ma do tego słowo kluczowe enum. Luau go nie ma i nie jest ono potrzebne, ponieważ tę rolę spełniają dwa narzędzia, które już znasz.

Wzorzec 1: tablica stałych. Zwykła tablica przypisuje znaczącym nazwom wartości, zastępując „magiczne liczby” porozrzucane w kodzie:

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

print(Status.Active) -- 2

To rzeczywista wartość w czasie działania programu: możesz odczytać Status.Active, porównać z nią inną wartość i przekazywać ją dalej — tak jak tablice, których używasz od samego początku.

Wzorzec 2: unia literałów. Typ złożony z dokładnych wartości tekstowych, wykorzystujący typy literałowe poznane w rozdziale o uniach:

type Color = "red" | "green" | "blue"
local favorite: Color = "green" -- ✓
local oops: Color = "yellow"    -- ✗ błąd typu

Unia istnieje tylko na potrzeby mechanizmu sprawdzającego typy i nie powoduje żadnych kosztów w czasie działania programu, ale gwarantuje, że zmienna nie może przechowywać wartości spoza zbioru. Te dwa wzorce się uzupełniają: tablica udostępnia wartości w czasie działania programu pod jedną nazwą, a unia daje gwarancję na etapie kompilacji. W dalszej części tego rozdziału poznasz też table.freeze, które chroni tablicę stałych przed modyfikacją w czasie działania programu.

challenge icon

Wyzwanie

Łatwy

Wypróbuj oba wzorce wyliczeniowe obok siebie.

  1. Utwórz tabelę stałych local Speed = {Slow = 8, Fast = 24}.
  2. Zapisz type Pace = "slow" | "fast" i zadeklaruj local pace: Pace = "fast".
  3. Wyświetl Speed.Fast, a następnie pace.

Naciśnij Uruchom kod: wynik pokazuje 24 i fast.

Spróbuj swoich sił

-- 1) stała tabela Speed z Slow = 8, Fast = 24
-- 2) typ Pace = "slow" | "fast", następnie lokalna zmienna pace: Pace = "fast"
-- 3) wypisz Speed.Fast, a następnie pace

Wszystkie lekcje w sekcji Wprowadzenie do Luau

Poćwicz samodzielnie: Kompilator Luau online