Menu
CoddyTech

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 è facoltativo

Hai 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")
end

Facoltativo significa «può essere assente». Non significa «di qualsiasi tipo». Se email esiste, deve comunque essere una stringa.

challenge icon

Sfida

Facile

Stampa i contatti il cui indirizzo email potrebbe mancare.

  1. Scrivi type User = {name: string, email: string?}, poi local mia: User = {name = "Mia", email = "mia@coddy.tech"} e local leo: User = {name = "Leo"}.
  2. Scrivi local function printContact(user: User) per stampare `{user.name}: {user.email}` oppure `{user.name}: no email` se manca.
  3. Chiamala per mia, poi per leo.

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

Esercitati da solo: Compilatore Luau online