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.

Tous les champs ne sont pas toujours présents. En Lua, un champ de table manquant est simplement lu comme nil, ce qui est flexible, mais c’est aussi ainsi que des bugs comme attempt to concatenate a nil value se glissent dans le code.

Luau permet d’indiquer cela explicitement dans une structure : ajoutez ? après le type d’un champ pour le marquer comme facultatif :

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à rencontré cela avec les variables : string? est une abréviation de string | nil. La même idée s’applique maintenant aux champs individuels d’une structure.

Comme un champ facultatif peut être nil, vous devez le vérifier avant de l’utiliser. Le modèle classique de Lua 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 string
else
    print("no email on file")
end

Facultatif signifie « peut être absent ». Cela ne signifie pas « n’importe quel type ». Si email existe, il doit toujours être une chaîne.

challenge icon

Défi

Facile

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

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

Crée deux utilisateurs :

  • alice : nom "Alice", e-mail "alice@luau.dev"
  • bob : nom "Bob", sans e-mail

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

Ensuite :

  1. appelle printContact(alice)
  2. appelle printContact(bob)
  3. affiche 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

Entraînez-vous par vous-même : Compilateur Lua en ligne