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 optionnelVous 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")
endFacultatif signifie « peut être absent ». Cela ne signifie pas « n’importe quel type ». Si email existe, il doit toujours être une chaîne.
Défi
FacileCrée un alias de type nommé User avec :
namede typestring(requis)emailde typestring?(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 :
- appelle
printContact(alice) - appelle
printContact(bob) - 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
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 MapsEntraînez-vous par vous-même : Compilateur Lua en ligne