Sicurezza rispetto a nil in modalità strict
Fa parte della sezione Introduzione a Luau del percorso Lua di Coddy. Lezione 77 di 80.
L'errore più comune in Lua è "attempt to index nil": codice che presumeva l'esistenza di un valore che invece non c'era. La risposta di Luau è la disciplina di nil: con --!strict, una semplice string non può mai essere nil. Se nil è una possibilità concreta, il tipo deve indicarlo con ?:
--!strict
local nickname: string? = nil -- ok: string O nil
local username: string = nil -- ✗ errore di tipo in modalità strictLa disciplina vale in entrambi i sensi: se hai una string?, la modalità strict non ti permetterà di usarla come stringa finché non avrai escluso nil. Lo strumento standard è un semplice confronto, che restringe il tipo proprio come una guardia typeof:
local function shout(name: string?): string
if name ~= nil then
return string.upper(name) -- qui name è una stringa
end
return "NOBODY"
endQuando nil sarebbe un errore anziché un caso valido, usa assert: dopo assert(x ~= nil), il controllo considera x non nil per il resto dell'ambito e, in fase di esecuzione, l'assert genera subito un errore nel punto in cui l'ipotesi è errata, invece che in un punto lontano.
Il vantaggio: il controllo ti costringe a gestire ogni valore che «potrebbe mancare» mentre modifichi il codice, e l'errore di runtime semplicemente non si verifica mai.
Sfida
FacileFornisci un nome a cui potrebbe mancare un valore predefinito sicuro.
- Mantieni
--!strictsulla prima riga. - Scrivi
local function getDisplayName(fullName: string?): stringrestituendofullNamequando non ènil, altrimenti"Anonymous User". - Stampa
getDisplayName("John Smith")egetDisplayName(nil).
Premi Esegui codice: l'output mostra John Smith e Anonymous User.
Provalo tu
--!strict
-- 1) getDisplayName(fullName: string?): string, usando "Anonymous User" come valore predefinito
-- 2) stampalo per "John Smith" e nil
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 tipi8Gli enum, secondo lo stile di Luau
Il pattern degli enum in LuauEnum numerici con le tabelleEnum di stringhe come unioniUsare enum con unioni di valori letteraliCongelare le tabelle costantiRiepilogo: gli enum, secondo lo stile di Luau11Argomenti avanzati
Asserzioni di tipoGuardie di tipo con typeofIl tipo neverSicurezza rispetto a nil in modalità strictFirme di indiceRipasso: tipi dei valori di configurazioneRipasso: perfezionamento dei 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 mappeEsercitati da solo: Compilatore Luau online