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 optionnelVous 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")
endOptionnel signifie "peut être absent" — cela ne signifie pas "n'importe quel type". Si email existe, cela doit toujours être une chaîne (string).
Défi
FacileCréez un alias de type nommé User avec :
namede typestring(requis)emailde typestring?(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 :
- appelez
printContact(alice) - appelez
printContact(bob) - 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
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
1Premiers pas avec Luau
Qu'est-ce que Luau ?Pourquoi utiliser Luau ?Votre premier code LuauVérification de type et modes d'erreurRécapitulatif : Introduction à Luau4Travailler avec les fonctions
Typage des paramètres et valeurs de retourTypage des fonctions anonymesFonctions ne retournant rienParamètres optionnelsValeurs par défaut des paramètresFonctions variadiquesDéfinition des types de fonctionsRécapitulatif : Fonctions typées2Types fondamentaux
Types de base : num, str, boolLe type 'any' : la porte de sortieLe type 'unknown'Types Nil et optionnelsL'inférence de type en actionAnnotations explicites de typeRécapitulatif : Pratique des types fondamentaux5Alias, unions et intersections
Alias de types pour les types primitifsTypes unionsTravailler avec les types unionsTypes littérauxTypes intersectionsCombinaison d'alias de typesRécapitulatif : Combinaisons de types avancées3Tables typées : Tableaux et Maps
Tableaux typésAjout et lecture d'élémentsQu'est-ce qu'un type Map ?Déclaration et accès aux MapsItération sur les tablesTables à formes mixtesTableaux typés multidimensionnelstable.unpack et VarargsRécapitulatif : Tableaux et Maps