Point vs deux-points
Fait partie de la section Programmation orientée objet du Journey Lua de Coddy. Leçon 4 sur 70.
Maintenant que tu connais les syntaxes avec le point et les deux-points, voici quel est leur lien et ce qui ne va pas quand la table n’est pas transmise.
Les deux-points sont une forme abrégée. Définir function game:addPoints(points) revient à définir function game.addPoints(self, points), et appeler game:addPoints(10) revient à appeler game.addPoints(game, 10). Une méthode fonctionne tant que la table lui est transmise comme premier argument.
Voici ce qui se passe lorsque le tableau n'est pas transmis :
local game = { score = 0 }
function game:addPoints(points)
self.score = self.score + points
end
-- ERREUR : appel avec un point, mais aucune table n’a été transmise
game.addPoints(10) -- Erreur ! self vaut maintenant 10, et non la tableLorsque tu appelles game.addPoints(10), Lua ne transmet pas automatiquement game. La valeur 10 devient self, et self.score échoue parce que 10 est un nombre, pas une table.
Une fonction définie avec un point et un self explicite fonctionne avec un appel utilisant deux-points, car les deux-points transmettent la table comme premier argument :
function game.reset(self)
self.score = 0
end
-- Appel avec deux-points : game:reset() équivaut à game.reset(game)
game:reset() -- self reçoit bien game, donc cela fonctionneLes deux définitions créent la même fonction ; le choix relève donc d’une convention : utilise les deux-points pour définir et appeler les fonctions qui utilisent self, et le point pour celles qui n’utilisent pas self. Ainsi, chaque appel indique si la table est transmise.
Défi
FacileCrée une table nommée player avec un champ score initialisé à 0.
Ajoute deux fonctions à la table :
player.setScore(self, value)- définie avec la syntaxe avec un point et le paramètreselfexplicite. Définitself.scoreà la valeur donnée.player:addBonus(amount)- définie avec la syntaxe avec deux-points. Ajouteamountàself.score.
Tu recevras deux entrées :
- Une valeur de score initiale
- Un bonus à ajouter
Effectue les étapes suivantes :
- Appelle
setScoreavec la syntaxe avec un point (en passant la table comme premier argument) pour définir le score initial - Appelle
addBonusavec la syntaxe avec deux-points pour ajouter le bonus - Affiche la valeur finale de
player.score
N'oublie pas : la manière dont tu appelles chaque fonction doit correspondre à la manière dont elle a été définie.
Essayez vous-même
-- Lire l’entrée
local initialScore = tonumber(io.read())
local bonusAmount = tonumber(io.read())
-- TODO: Écrivez votre code ci-dessous
-- 1. Créez une table nommée 'player' avec un champ 'score' initialisé à 0
-- 2. Ajoutez player.setScore(self, value) en utilisant la syntaxe avec un point et self explicite
-- 3. Ajoutez player:addBonus(amount) en utilisant la syntaxe avec deux-points
-- 4. Appelez setScore en utilisant la syntaxe avec un point (en passant la table comme premier argument)
-- 5. Appelez addBonus en utilisant la syntaxe avec deux-points
-- Afficher le score final
print(player.score)Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Programmation orientée objet
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 RectangleClasse CercleMéthode PérimètreCollection de formesAire totaleFiltrer les formes2Modè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 formesEntraînez-vous par vous-même : Compilateur Lua en ligne