Structures vs tables libres
Fait partie de la section Introduction à Luau du Journey Lua de Coddy. Leçon 40 sur 73.
Vous disposez maintenant de deux façons de travailler avec les tables d’enregistrements : la manière souple que vous avez toujours utilisée en Lua, et les formes déclarées. Il vaut la peine de s’arrêter un instant pour voir ce que chacune apporte.
Une table souple accepte n’importe quoi. Cette flexibilité a un prix : faites une faute de frappe dans un champ (user.nmae) et vous obtenez silencieusement nil ; oubliez un champ et le bogue apparaît bien plus loin, à l’exécution, dans le code qui touche le premier à l’emplacement manquant :
local user = {name = "Ana", age = 20}
print(user.nmae) -- table lâche : affiche silencieusement nilDéclarez une forme et ces erreurs passent de l’exécution au moment de l’édition. Le vérificateur signale la faute dès que vous l’écrivez, votre éditeur peut compléter automatiquement les noms de champs, et la déclaration type sert également de documentation sur le contenu de la table :
type User = {name: string, age: number}
local user: User = {name = "Ana", age = 20}
print(user.nmae) -- ✗ erreur de type : clé 'nmae' introuvable dans UserSi vous venez de TypeScript, notez que Luau ne possède pas de mot-clé interface : type gère toutes les formes. Il n’existe pas non plus de « fusion de déclarations » : déclarer deux types portant le même nom dans la même portée est une erreur, de sorte que chaque forme possède exactement une définition.
Les formes de Luau sont structurelles : toute table contenant les bons champs avec les bons types correspond, peu importe où ou comment elle a été créée. Et les tables souples ont toujours leur utilité : les scripts rapides et les données véritablement dynamiques n’ont pas besoin d’une forme déclarée. Pour tout ce qui est transmis entre fonctions, en revanche, une forme permet de détecter les erreurs alors qu’il est encore facile de les corriger.
Essayez vous-même
Cette leçon ne comprend pas de défi de code.
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 Maps6Typage des structures de tables
Annotations de structures en ligneAlias de types pour les structuresPropriétés optionnellesStructures vs tables libresExtension de structuresAjout de méthodes aux structuresMéthodes avec Self et deux-pointsRécapitulatif : Définir des structures de tablesEntraînez-vous par vous-même : Compilateur Lua en ligne