Menu
Coddy logo textTech

Tipi letterali

Fa parte della sezione Introduzione a Luau del percorso Lua di Coddy. Lezione 33 di 73.

Tipi come string consentono qualsiasi stringa, ma a volte solo pochi valori esatti hanno senso. Un tipo letterale usa il valore stesso come tipo:

local mode: "dark" = "dark"   -- è consentita solo la stringa "dark"
local locked: true = true      -- è consentito solo il valore booleano true

Da soli, i tipi con un solo valore sono una curiosità. Combinati con le unioni, diventano uno degli strumenti più utili di Luau: un insieme rigorosamente controllato di valori consentiti:

type Direction = "north" | "south" | "east" | "west"
type GameState = "menu" | "playing" | "paused" | "gameover"

local move: Direction = "north"     -- ✓
local state: GameState = "playing"  -- ✓
-- local bad: Direction = "diagonal" -- ✗ errore di tipo!

Ora, un errore di battitura come "nort" o un valore non valido come "diagonal" viene rilevato mentre modifichi il codice; con una semplice string, passerebbe senza problemi e causerebbe un errore in fase di esecuzione, sempre che tu sia abbastanza fortunato da accorgertene.

I tipi letterali distinguono tra maiuscole e minuscole e richiedono una corrispondenza esatta: "North" non corrisponde a "north". I letterali stringa sono il caso più comune, ma i letterali booleani e (nelle versioni più recenti di Luau) numerici funzionano allo stesso modo. Questo schema, un’unione di letterali stringa, è anche il modo in cui Luau sostituisce gli enum di altri linguaggi, come vedrai in un capitolo successivo.

challenge icon

Sfida

Facile

Crea tre alias di tipo unione di valori letterali:

  • Direction = "north" | "south" | "east" | "west"
  • GameState = "menu" | "playing" | "paused" | "gameover"
  • Difficulty = "easy" | "medium" | "hard"

Dichiara, usando gli alias:

  • playerDirection: Direction = "north"
  • currentState: GameState = "playing"
  • selectedDifficulty: Difficulty = "medium"

Crea una funzione movePlayer(direction: Direction): string che restituisca "Moving [direction]" e una funzione updateGameState(state: GameState): string che restituisca "Game state: [state]".

Stampa, ciascuno su una riga distinta:

  1. movePlayer(playerDirection)
  2. updateGameState(currentState)
  3. il valore di selectedDifficulty

Provalo tu

-- Scrivi il codice qui
-- definisci Direction / GameState / Difficulty come unioni di letterali
-- dichiara playerDirection, currentState, selectedDifficulty
-- movePlayer(direction: Direction): string -> "Moving [direction]"
-- updateGameState(state: GameState): string -> "Game state: [state]"
-- stampa i tre risultati
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Introduzione a Luau

Esercitati da solo: Compilatore Luau online