La syntaxe avec deux-points
Fait partie de la section Object Oriented Programming du Journey Lua de Coddy — leçon 3 sur 70.
Écrire counter.increment(counter) à chaque fois est fastidieux et source d'erreurs. Lua propose une manière plus élégante : l'opérateur deux-points (:).
Lorsque vous définissez une fonction à l'aide de deux-points, Lua ajoute automatiquement self comme premier paramètre :
local player = {
name = "Hero"
}
-- Utilisation des deux-points dans la définition
function player:greet()
print("Hello, I am " .. self.name)
endLes deux-points fonctionnent également lors de l'appel de la fonction. Ils passent automatiquement la table comme premier argument :
player:greet() -- Résultat : Hello, I am HeroCeci est équivalent à écrire player.greet(player), mais beaucoup plus propre. Les deux-points gèrent le paramètre self aux deux extrémités — lors de la définition et lors de l'appel.
Voici une comparaison montrant que les deux approches produisent des résultats identiques :
local counter = { value = 0 }
-- Syntaxe avec point (self explicite)
function counter.increment(self)
self.value = self.value + 1
end
counter.increment(counter)
-- Syntaxe avec deux-points (self automatique)
function counter:decrement()
self.value = self.value - 1
end
counter:decrement()La syntaxe avec les deux-points est la manière standard de définir et d'appeler des méthodes en Lua. Cela rend votre code plus court et moins répétitif.
Défi
FacileCréez une table nommée greeter avec un champ message initialisé à une valeur que vous recevrez en entrée.
Ajoutez une méthode :sayHello(name) en utilisant la syntaxe avec deux-points qui affiche la salutation dans ce format :
[message], [name]!Vous recevrez deux entrées :
- Le message de salutation à stocker dans
greeter.message - Un nom à passer à la méthode
:sayHello()
Définissez la méthode en utilisant la syntaxe avec deux-points et appelez-la en utilisant la syntaxe avec deux-points. Affichez la salutation formatée.
Par exemple, si le message est Welcome et le nom est Luna, la sortie devrait être :
Welcome, Luna!Aide-mémoire
L'opérateur deux-points (:) offre une syntaxe plus propre pour définir et appeler des méthodes en Lua en gérant automatiquement le paramètre self.
Lors de la définition d'une fonction avec un deux-points, self est automatiquement ajouté comme premier paramètre :
function player:greet()
print("Hello, I am " .. self.name)
endLors de l'appel d'une fonction avec un deux-points, la table est automatiquement passée comme premier argument :
player:greet() -- Equivalent à player.greet(player)Comparaison de la syntaxe avec point par rapport à la syntaxe avec deux-points :
-- Syntaxe avec point (self explicite)
function counter.increment(self)
self.value = self.value + 1
end
counter.increment(counter)
-- Syntaxe avec deux-points (self automatique)
function counter:decrement()
self.value = self.value - 1
end
counter:decrement()La syntaxe avec deux-points est la manière standard de définir et d'appeler des méthodes en Lua, ce qui rend le code plus court et moins répétitif.
Essayez vous-même
-- Lire l'entrée
local message = io.read()
local name = io.read()
-- À FAIRE : Écrivez votre code ci-dessous
-- 1. Créer une table nommée 'greeter' avec un champ 'message'
-- 2. Ajouter une méthode :sayHello(name) en utilisant la syntaxe avec deux-points
-- 3. Appeler la méthode en utilisant la syntaxe avec deux-points pour afficher la salutationCette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Object Oriented Programming
1Le concept de « self »
Tables avec fonctions« self » expliciteLa syntaxe avec deux-pointsPoint vs deux-pointsRécapitulatif - Point mobile4Projet : Banque numérique
Configuration du projetMéthode de dépôt7Polymorphisme et Redéfinition
Redéfinition de méthodesAppeler des méthodes parentesDuck TypingInterface communeVérification du typeRécapitulatif - Rôles des employés10Projet : Gestionnaire de formes
Configuration du projetClasse Rectangle2Modèle de prototype de classe
Le concept de prototypeLiaison avec __indexLe constructeur :new()Initialisation des attributsInstances indépendantesRécapitulatif - Usine de voitures5Surcharge d'opérateurs en POO
Additionner des objetsSoustraire des objetsConcaténer des objetsComparer des objets (<, >)Récapitulatif - Calculs de portefeuille8Encapsulation
Conventions de nommageClosures pour la confidentialitéAccès via les ClosuresTables en lecture seuleLogique de validationRécapitulatif - Coffre-fort sécurisé11Patrons de conception (Lite)
Fonctions FactoryTable SingletonPatron IteratorObserver (Écouteur)Récapitulatif - Logger Factory3État et comportement des objets
Variables d'instanceMéthodes GetterMéthodes SetterPropriétés calculéesFormatage de chaînesVérifications d'égalitéRécapitulatif - Note de l'étudiant6Bases de l'héritage
Mise en place de l'héritageHériter des méthodesÉtendre le constructeurAjouter des méthodes enfantsPartagé vs UniqueRécapitulatif - Hiérarchie des formes