Menu
CoddyTech

Ajout de méthodes aux structures

Fait partie de la section Introduction à Luau du Journey Lua de Coddy. Leçon 44 sur 80.

Dans ton chapitre sur la POO en Lua, tu as appris que les tables peuvent contenir des fonctions, comme n’importe quelle autre valeur. Les formes peuvent aussi décrire ces champs de fonction : une forme devient ainsi un petit contrat de données et de comportement.

Un champ de méthode utilise la syntaxe de type fonction que tu as apprise dans le chapitre sur les fonctions. Son premier paramètre s’appelle conventionnellement 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, stocke une fonction dans le champ et donne-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 que tu passes toi-même la table comme 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 tu connais déjà le remède de Lua : les deux-points. La prochaine leçon relie la syntaxe : à ces formes typées.

challenge icon

Défi

Facile

Ajoute à une forme rectangle une méthode qui calcule son aire.

  1. Écris type Rectangle = {width: number, height: number, area: (self: Rectangle) -> number}.
  2. Crée local rect: Rectangle avec une largeur de 4, une hauteur de 6 et area = function(self: Rectangle): number qui renvoie self.width * self.height.
  3. Affiche rect.area(rect), puis rect.width.

Appuie sur Run Code : le résultat affiche 24 et 4.

Essayez vous-même

-- 1) type Rectangle avec width, height et une méthode area
-- 2) rect local : Rectangle (width 4, height 6) avec area implémentée
-- 3) afficher l’aire, puis la largeur

Toutes les leçons de Introduction à Luau

Entraînez-vous par vous-même : Compilateur Luau en ligne