Menu
Coddy logo textTech

Propriétés optionnelles

Fait partie de la section Introduction à Luau du Journey Lua de Coddy — leçon 39 sur 73.

Chaque champ n'est pas toujours présent. En Lua, un champ de table manquant vaut tout simplement nil — ce qui est flexible, mais permet aussi à des bugs tels que attempt to concatenate a nil value de s'infiltrer.

Luau vous permet d'exprimer cela explicitement dans un shape : ajoutez ? après le type d'un champ pour le marquer comme optionnel (optional) :

type User = {
    name: string,   -- requis
    email: string?, -- optionnel : string ou nil
}

local alice: User = {name = "Alice", email = "alice@luau.dev"}
local bob: User = {name = "Bob"} -- ✓ bien, email est optionnel

Vous avez déjà vu cela avec les variables : string? est un raccourci pour string | nil. La même idée s'applique désormais aux champs individuels d'un shape.

Puisqu'un champ optionnel peut être nil, vous devez effectuer une vérification (check) avant de l'utiliser (using). Le motif Lua classique fonctionne, et en mode strict, le vérificateur affine le type à l'intérieur de la branche :

if bob.email then
    print(`email: {bob.email}`) -- ici email est une chaîne
else
    print("no email on file")
end

Optionnel signifie "peut être absent" — cela ne signifie pas "n'importe quel type". Si email existe, cela doit toujours être une chaîne (string).

challenge icon

Défi

Facile

Créez un alias de type nommé User avec :

  • name de type string (requis)
  • email de type string? (optionnel)

Créez deux utilisateurs :

  • alice — nom "Alice", e-mail "alice@luau.dev"
  • bob — nom "Bob", pas d'e-mail

Créez une fonction printContact qui prend un User. Si l'utilisateur a un e-mail, elle affiche [name] - [email] ; sinon elle affiche [name] - no email.

Puis :

  1. appelez printContact(alice)
  2. appelez printContact(bob)
  3. affichez le résultat de la comparaison bob.email == nil

Essayez vous-même

-- Écrivez le code ici
-- 1) définissez le type User avec un champ email optionnel
-- 2) créez alice (avec email) et bob (sans)
-- 3) écrivez printContact avec une vérification de nil
-- 4) appelez-la pour les deux utilisateurs, puis affichez bob.email == nil
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Introduction à Luau