Tables avec fonctions
Fait partie de la section Object Oriented Programming du Journey Lua de Coddy — leçon 1 sur 70.
En Lua, les tables sont incroyablement polyvalentes. Au-delà du stockage de données, elles peuvent également contenir des fonctions. Cela vous permet de regrouper des opérations liées, gardant votre code organisé et facile à gérer.
Pour placer une fonction à l'intérieur d'une table, il vous suffit de l'assigner à une clé comme n'importe quelle autre valeur :
local myTable = {
greet = function(name)
return "Hello, " .. name
end
}
print(myTable.greet("Alice")) -- Résultat : Hello, AliceVous pouvez également définir la fonction séparément, puis l'ajouter à la table :
local myTable = {}
myTable.greet = function(name)
return "Hello, " .. name
endOu utilisez cette syntaxe raccourcie plus concise :
local myTable = {}
function myTable.greet(name)
return "Hello, " .. name
endLes trois approches produisent le même résultat. Vous appelez la fonction en utilisant la notation par point : myTable.greet("Alice"). Ce modèle de regroupement de fonctions avec des données est le fondement de la programmation orientée objet en Lua.
Défi
FacileCréez une table nommée calculator qui contient quatre fonctions arithmétiques :
add(a, b)- retourne la somme deaetbsubtract(a, b)- retourneamoinsbmultiply(a, b)- retourne le produit deaetbdivide(a, b)- retourneadivisé parb
Vous recevrez trois entrées :
- Un nom d'opération (l'un des suivants :
add,subtract,multiply,divide) - Le premier nombre
- Le second nombre
Appelez la fonction appropriée de votre table calculator en fonction du nom de l'opération et affichez le résultat.
Aide-mémoire
En Lua, les tables peuvent stocker des fonctions aux côtés de données. Pour ajouter une fonction à une table, affectez-la à une clé :
local myTable = {
greet = function(name)
return "Hello, " .. name
end
}
print(myTable.greet("Alice")) -- Résultat : Hello, AliceVous pouvez également définir des fonctions séparément et les ajouter à la table :
local myTable = {}
myTable.greet = function(name)
return "Hello, " .. name
endOu utilisez la syntaxe abrégée :
local myTable = {}
function myTable.greet(name)
return "Hello, " .. name
endAppelez les fonctions de table en utilisant la notation par point : myTable.greet("Alice")
Essayez vous-même
-- Lire les entrées
local operation = io.read()
local num1 = tonumber(io.read())
local num2 = tonumber(io.read())
-- À FAIRE : Créer une table calculator avec quatre fonctions :
-- add(a, b), subtract(a, b), multiply(a, b), divide(a, b)
-- À FAIRE : Appeler la fonction appropriée de la table calculator en utilisant le nom de l'opération
-- et afficher le résultatCette 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