Menu
CoddyTech

Il pattern degli enum in Luau

Fa parte della sezione Introduzione a Luau del percorso Lua di Coddy. Lezione 55 di 80.

I programmi sono pieni di valori scelti da un insieme piccolo e fisso: un ordine è in attesa, spedito o consegnato; un giocatore è rivolto verso l’alto, verso il basso, a sinistra o a destra. Molti linguaggi hanno una parola chiave enum per questo. Luau non ce l’ha e non ne ha bisogno, perché due strumenti che già conosci bastano per svolgere questo compito.

Schema 1: la tabella di costanti. Una semplice tabella associa nomi significativi a valori, sostituendo i «numeri magici» sparsi nel codice:

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

print(Status.Active) -- 2

È un vero valore in fase di esecuzione: puoi leggere Status.Active, confrontarlo e passarlo ad altri, proprio come hai sempre fatto con le tabelle.

Schema 2: l’unione di valori letterali. Un tipo composto da valori stringa esatti, che usa i tipi letterali incontrati nel capitolo sulle unioni:

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

L’unione esiste solo per il verificatore e non ha alcun costo in fase di esecuzione, ma garantisce che una variabile non possa contenere valori al di fuori dell’insieme. I due schemi si completano a vicenda: la tabella ti fornisce valori in fase di esecuzione sotto un unico nome; l’unione ti offre una garanzia in fase di compilazione. Più avanti in questo capitolo incontrerai anche table.freeze, che protegge una tabella di costanti dalle modifiche in fase di esecuzione.

challenge icon

Sfida

Facile

Prova entrambi i modelli di enumerazione affiancati.

  1. Crea la tabella di costanti local Speed = {Slow = 8, Fast = 24}.
  2. Scrivi type Pace = "slow" | "fast" e dichiara local pace: Pace = "fast".
  3. Stampa Speed.Fast, poi pace.

Premi Esegui codice: l'output mostra 24 e fast.

Provalo tu

-- 1) una tabella costante Speed con Slow = 8, Fast = 24
-- 2) tipo Pace = "slow" | "fast", poi local pace: Pace = "fast"
-- 3) stampa Speed.Fast, poi pace

Tutte le lezioni di Introduzione a Luau

Esercitati da solo: Compilatore Luau online