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 erroriDichiara 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 UserSe 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.
Sfida
FacileTrasforma una tabella senza forma dichiarata in una con una forma dichiarata.
- Sopra la tabella, scrivi
type Pet = {name: string, age: number}. - Annota la tabella:
local pet: Pet = {name = "Biscuit", age = 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
1Per iniziare con Luau
Che cos'è Luau?Perché usare Luau?Il tuo primo codice LuauVerifica dei tipi e modalità di erroreRiepilogo: introduzione a Luau4Lavorare con le funzioni
Tipizzare parametri e valori restituitiTipizzare le funzioni anonimeFunzioni che non restituiscono nullaParametri opzionaliValori predefiniti dei parametriValori predefiniti per i booleaniFunzioni variadicheDefinire i tipi di funzioneRiepilogo: funzioni tipizzate7Progetto: Gestore di attività tipizzato
Progetto: La struttura di un'attivitàFunzione per aggiungere un'attività2Tipi fondamentali
Numero, stringa e booleanoIl tipo 'any': una via di fugaIl tipo 'unknown'Tipi nil e opzionaliL’inferenza dei tipi in praticaAnnotazioni esplicite dei tipiRipasso: esercizi sui tipi fondamentali5Alias, unioni e intersezioni
Alias di tipo per i primitiviTipi unioneLavorare con i tipi unioneTipi letteraliTipi intersezioneCombinare gli alias di tipoRiepilogo: combinazioni avanzate di tipi3Tabelle tipizzate: array e mappe
Array tipizzatiAggiungere e leggere elementiChe cos'è un tipo map?Dichiarare e accedere alle mappeIterare sulle tabelleTabelle con forme misteLeggere una grigliaCreare una grigliatable.unpackRiepilogo: array e mappe6Tipizzare le forme delle tabelle
Annotazioni inline delle formeAlias di tipo per le formeProprietà opzionaliForme e tabelle libere a confrontoEstendere le formeAggiungere metodi alle formeSelf e metodi con i due puntiRiepilogo: definire le forme delle tabelleEsercitati da solo: Compilatore Luau online