Propriétés optionnelles
Fait partie de la section Introduction à Luau du Journey Lua de Coddy. Leçon 41 sur 80.
Tous les champs ne sont pas toujours présents. En Lua, un champ manquant dans une table se lit simplement 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 explicitement cette forme : ajoute ? après le type d’un champ pour le marquer comme facultatif :
type User = {
name: string, -- obligatoire
email: string?, -- facultatif : string ou nil
}
local alice: User = {name = "Alice", email = "alice@luau.dev"}
local bob: User = {name = "Bob"} -- ✓ correct, email est facultatifTu as déjà vu cela avec les variables : string? est un raccourci pour string | nil. La même idée s’applique maintenant aux champs individuels d’une forme.
Comme un champ facultatif peut être nil, tu dois le vérifier avant de l’utiliser. Le modèle classique de Lua fonctionne, et en mode strict, le vérificateur affine le type dans la branche :
if bob.email then
print(`email: {bob.email}`) -- ici, email est une chaîne de caractères
else
print("no email on file")
endFacultatif signifie « peut être absent ». Cela ne signifie pas « de n’importe quel type ». Si email existe, il doit toujours être une chaîne.
Défi
FacileAffiche les contacts dont l’adresse e-mail peut être manquante.
- Écris
type User = {name: string, email: string?}, puislocal mia: User = {name = "Mia", email = "mia@coddy.tech"}etlocal leo: User = {name = "Leo"}. - Écris
local function printContact(user: User)pour afficher`{user.name}: {user.email}`, ou`{user.name}: no email`si elle n’est pas renseignée. - Appelle-la pour
mia, puisleo.
Appuie sur Exécuter : le résultat affiche Mia: mia@coddy.tech et Leo: no email.
Essayez vous-même
-- 1) définir le type User avec un email facultatif, puis mia et leo
-- 2) définir printContact(user: User) avec une vérification de l’email
-- 3) appeler printContact pour mia, puis leo
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
Typer les paramètres et les valeurs de retourTyper les fonctions anonymesFonctions sans valeur de retourParamètres optionnelsValeurs par défaut des paramètresValeurs par défaut pour les booléensFonctions variadiquesDéfinir des types de fonctionsRécapitulatif : fonctions typées7Projet : gestionnaire de tâches typé
Projet : la structure d’une tâcheFonction pour ajouter une tâche2Types fondamentaux
Nombre, chaîne de caractères et booléenLe type « any » : une échappatoireLe type « unknown »Types nil et optionnelsL’inférence de types en actionAnnotations de type explicitesRécapitulatif : exercices sur les 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ésAjouter et lire des élémentsQu’est-ce qu’un type Map ?Déclarer et accéder aux mapsParcourir les tablesTables de formes mixtesLire une grilleConstruire une grilletable.unpackRécapitulatif : tableaux et mapsEntraînez-vous par vous-même : Compilateur Luau en ligne