Menu
CoddyTech

Forme e tabelle libere a confronto

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

Ora hai due modi per lavorare con le tabelle di record: il modo libero che hai sempre usato in Lua e le strutture dichiarate. Vale la pena soffermarsi a vedere cosa offre ciascuno.

Una tabella libera accetta qualsiasi cosa. Questa flessibilità ha un prezzo: se scrivi male un campo (user.nmae), ottieni silenziosamente nil; se dimentichi un campo, il bug si manifesta molto più avanti, durante l'esecuzione, nel codice che per primo incontra quella lacuna:

local user = {name = "Ana", age = 20}
print(user.nmae) -- tabella non rigidamente tipizzata: stampa nil senza segnalare errori

Dichiara una struttura e questi errori si spostano dal tempo di esecuzione al momento della modifica. Il verificatore segnala l'errore di battitura non appena lo scrivi, il tuo editor può completare automaticamente i nomi dei campi e la dichiarazione type funge anche da documentazione di ciò che contiene la tabella:

type User = {name: string, age: number}
local user: User = {name = "Ana", age = 20}
print(user.nmae) -- ✗ errore di tipo: chiave 'nmae' non trovata in User

Se conosci già TypeScript, tieni presente che Luau non ha la parola chiave interface: type gestisce ogni struttura. Inoltre, non esiste la «fusione delle dichiarazioni»: dichiarare due tipi con lo stesso nome nello stesso ambito è un errore, quindi ogni struttura ha esattamente una definizione.

Le strutture di Luau sono strutturali: qualsiasi tabella con i campi giusti dei tipi giusti corrisponde, indipendentemente da dove o come è stata creata. Anche le tabelle libere hanno comunque il loro posto: gli script rapidi e i dati veramente dinamici non hanno bisogno di una struttura dichiarata. Per qualsiasi dato passato tra funzioni, però, una struttura intercetta gli errori quando correggerli costa ancora poco.

challenge icon

Sfida

Facile

Trasforma una tabella senza forma dichiarata in una con una forma dichiarata.

  1. Sopra la tabella, scrivi type Pet = {name: string, age: number}.
  2. Annota la tabella: local pet: Pet = {name = "Biscuit", age = 3}.
  3. Sotto la prima istruzione di stampa, aggiungi print(pet.age).

Premi Esegui codice: l'output mostra Biscuit e 3.

Provalo tu

-- Una tabella senza vincoli: nulla ne controlla i campi
local pet = {name = "Biscuit", age = 3}
print(pet.name)

Tutte le lezioni di Introduzione a Luau

Esercitati da solo: Compilatore Luau online