Ajout de méthodes aux structures
Fait partie de la section Introduction à Luau du Journey Lua de Coddy. Leçon 42 sur 73.
Dans votre chapitre sur la POO en Lua, vous savez que les tables peuvent contenir des fonctions comme n’importe quelle autre valeur. Les formes peuvent également décrire ces champs de fonction : transformant ainsi une forme en un petit contrat de données et de comportement.
Un champ de méthode utilise la syntaxe de type fonction que vous avez apprise dans le chapitre sur les fonctions. Son premier paramètre est traditionnellement nommé self, la table à laquelle appartient la méthode, et la forme peut même se référencer elle-même :
type Greeter = {
name: string,
greet: (self: Greeter) -> string,
}Pour implémenter la forme, stockez une fonction dans le champ et donnez-lui ce paramètre self :
local greeter: Greeter = {
name = "Ana",
greet = function(self: Greeter): string
return `Hello, I'm {self.name}`
end,
}L’appeler signifie transmettre vous-même la table en tant que self : greeter.greet(greeter). Grâce à self, la méthode lit les champs de la table sur laquelle elle a été appelée.
Écrire la table deux fois semble maladroit, et vous connaissez déjà le remède de Lua : les deux-points. La prochaine leçon relie la syntaxe : à ces formes typées.
Défi
FacileCrée un alias de type nommé Rectangle avec :
widthde typenumberheightde typenumberarea: une méthode(self: Rectangle) -> numberrenvoyantwidth * heightperimeter: une méthode(self: Rectangle) -> numberrenvoyant2 * (width + height)
Crée une variable rect de type Rectangle avec une largeur de 4, une hauteur de 6 et les deux méthodes implémentées (n'oublie pas le paramètre self).
Affiche, chacune sur sa propre ligne (appelle les méthodes avec la syntaxe en point, en passant rect comme self) :
- l'aire du rectangle
- le périmètre du rectangle
- la largeur du rectangle
Essayez vous-même
-- Écrivez le code ici
-- 1) définir le type Rectangle avec deux champs numériques et deux méthodes
-- 2) créer rect (width 4, height 6) implémentant les deux méthodes
-- 3) afficher area, perimeter et width
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