Méthodes avec Self et deux-points
Fait partie de la section Introduction à Luau du Journey Lua de Coddy. Leçon 45 sur 80.
Écrire rect.area(rect) fonctionne, mais tu as appris une meilleure façon dans le chapitre sur la POO en Lua : les deux-points. rect:area() correspond exactement au même appel : Lua transmet automatiquement la table située avant les deux-points comme premier argument, self.
Les deux-points sont aussi utiles lors de la définition. function account:deposit(amount) déclare pour toi un premier paramètre caché nommé self :
type Account = {
owner: string,
balance: number,
deposit: (self: Account, amount: number) -> (),
getBalance: (self: Account) -> number,
}
local account = {owner = "Maya", balance = 1500}
function account:deposit(amount: number)
self.balance += amount -- self est implicite
end
function account:getBalance(): number
return self.balance
endRemarque que la structure déclare self explicitement, deposit: (self: Account, amount: number) -> (), même si les deux-points le masquent dans l’implémentation. Les deux-points sont une simplification syntaxique ; le paramètre est toujours présent, et le type le précise. Une méthode qui ne renvoie rien est typée avec le retour vide -> ().
L’appel suit la même règle que tu connais déjà : account:deposit(250) est identique à account.deposit(account, 250). Le même comportement à l’exécution que dans ton chapitre sur la POO : Luau ajoute simplement des types par-dessus.
Remarque que account lui-même n’est pas annoté. Le type Account décrit la table complète, et la table ne lui correspond qu’une fois les deux méthodes ajoutées ; local account: Account = {owner = "Maya", balance = 1500} ferait signaler les méthodes manquantes en mode strict.
Défi
FacileAssocie deux méthodes à un compte avec la syntaxe à deux-points.
- Sous la table, définis
function account:deposit(amount: number)qui ajouteamountàself.balance. - Définis
function account:getBalance(): numberqui renvoieself.balance. - Affiche
account:getBalance(), appelleaccount:deposit(120), puis affiche de nouveauaccount:getBalance().
Appuie sur Exécuter le code : la sortie affiche 300, puis 420.
Essayez vous-même
type Account = {
owner: string,
balance: number,
deposit: (self: Account, amount: number) -> (),
getBalance: (self: Account) -> number,
}
local account = {owner = "Noah", balance = 300}
-- 1) fonction account:deposit(amount: number)
-- 2) fonction account:getBalance(): number
-- 3) affiche le solde, dépose 120, puis affiche-le à nouveau
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 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 Luau en ligne