Proprietà opzionali
Fa parte della sezione Introduzione a Luau del percorso Lua di Coddy. Lezione 41 di 80.
Non tutti i campi sono sempre presenti. In Lua, un campo di tabella mancante viene semplicemente letto come nil: è flessibile, ma è anche così che si insinuano bug come attempt to concatenate a nil value.
Luau permette a una forma di dichiararlo esplicitamente: aggiungi ? dopo il tipo di un campo per indicare che è facoltativo:
type User = {
name: string, -- obbligatorio
email: string?, -- facoltativo: string o nil
}
local alice: User = {name = "Alice", email = "alice@luau.dev"}
local bob: User = {name = "Bob"} -- ✓ va bene, email è facoltativoHai già incontrato questo concetto con le variabili: string? è una forma abbreviata di string | nil. Ora la stessa idea si applica ai singoli campi di una forma.
Poiché un campo facoltativo potrebbe essere nil, devi controllarlo prima di usarlo. Il classico schema di Lua funziona e, in modalità rigorosa, il controllo restringe il tipo all'interno del ramo:
if bob.email then
print(`email: {bob.email}`) -- qui email è una stringa
else
print("no email on file")
endFacoltativo significa «può essere assente». Non significa «di qualsiasi tipo». Se email esiste, deve comunque essere una stringa.
Sfida
FacileStampa i contatti il cui indirizzo email potrebbe mancare.
- Scrivi
type User = {name: string, email: string?}, poilocal mia: User = {name = "Mia", email = "mia@coddy.tech"}elocal leo: User = {name = "Leo"}. - Scrivi
local function printContact(user: User)per stampare`{user.name}: {user.email}`oppure`{user.name}: no email`se manca. - Chiamala per
mia, poi perleo.
Premi Esegui codice: l'output mostra Mia: mia@coddy.tech e Leo: no email.
Provalo tu
-- 1) definisci il tipo User con un email facoltativa, poi mia e leo
-- 2) printContact(user: User) con un controllo sull'email
-- 3) chiamala per mia, poi per leo
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