Menu
Coddy logo textTech

Proprietà opzionali

Fa parte della sezione Introduzione a Luau del percorso Lua di Coddy. Lezione 39 di 73.

Non tutti i campi sono sempre presenti. In Lua, un campo mancante di una tabella viene semplicemente letto come nil: è flessibile, ma è anche così che si insinuano bug come attempt to concatenate a nil value.

Luau permette di indicarlo esplicitamente nella forma: aggiungi ? dopo il tipo di un campo per contrassegnarlo come 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. La stessa idea ora si applica ai singoli campi di una forma.

Poiché un campo facoltativo potrebbe essere nil, devi controllarlo prima di usarlo. Lo schema classico di Lua funziona e, in modalità strict, il verificatore 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

Crea un alias di tipo chiamato User con:

  • name di tipo string (obbligatorio)
  • email di tipo string? (facoltativo)

Crea due utenti:

  • alice: nome "Alice", email "alice@luau.dev"
  • bob: nome "Bob", senza email

Crea una funzione printContact che accetta un User. Se l'utente ha un'email, stampa [name] - [email]; altrimenti stampa [name] - no email.

Poi:

  1. chiama printContact(alice)
  2. chiama printContact(bob)
  3. stampa il risultato del confronto bob.email == nil

Provalo tu

-- Scrivi il codice qui
-- 1) definisci il tipo User con un campo email opzionale
-- 2) crea alice (con email) e bob (senza)
-- 3) scrivi printContact con un controllo su nil
-- 4) chiama printContact per entrambi gli utenti, poi stampa bob.email == nil
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Introduzione a Luau

Esercitati da solo: Compilatore Luau online