Lua - Modules

Qu'est-ce qu'un module?

Le module est comme une bibliothèque qui peut être chargée à l'aide de require et qui a un seul nom global contenant une table. Ce module peut comprendre un certain nombre de fonctions et de variables. Toutes ces fonctions et variables sont encapsulées dans la table, qui agit comme un espace de noms. De plus, un module bien comporté dispose des dispositions nécessaires pour renvoyer ce tableau sur demande.

Spécialité des modules Lua

L'utilisation de tables dans les modules nous aide de nombreuses manières et nous permet de manipuler les modules de la même manière que nous manipulons n'importe quelle autre table Lua. En raison de la possibilité de manipuler des modules, il fournit des fonctionnalités supplémentaires pour lesquelles d'autres langages ont besoin de mécanismes spéciaux. En raison de ce mécanisme gratuit de modules dans Lua, un utilisateur peut appeler les fonctions dans Lua de plusieurs manières. Quelques-uns d'entre eux sont présentés ci-dessous.

-- Assuming we have a module printFormatter
-- Also printFormatter has a funtion simpleFormat(arg)
-- Method 1
require "printFormatter"
printFormatter.simpleFormat("test")

-- Method 2
local formatter = require "printFormatter"
formatter.simpleFormat("test")

-- Method 3
require "printFormatter"
local formatterFunction = printFormatter.simpleFormat
formatterFunction("test")

Dans l'exemple de code ci-dessus, vous pouvez voir à quel point la programmation flexible dans Lua est, sans aucun code supplémentaire spécial.

La fonction requise

Lua a fourni une fonction de haut niveau appelée require pour charger tous les modules nécessaires. Il est maintenu aussi simple que possible pour éviter d'avoir trop d'informations sur le module pour le charger. La fonction require suppose simplement les modules comme un morceau de code qui définit certaines valeurs, qui sont en fait des fonctions ou des tables contenant des fonctions.

Exemple

Prenons un exemple simple, où une fonction a les fonctions mathématiques. Appelons ce module comme mymath et le nom de fichier étant mymath.lua. Le contenu du fichier est le suivant -

local mymath =  {}

function mymath.add(a,b)
   print(a+b)
end

function mymath.sub(a,b)
   print(a-b)
end

function mymath.mul(a,b)
   print(a*b)
end

function mymath.div(a,b)
   print(a/b)
end

return mymath

Maintenant, pour accéder à ce module Lua dans un autre fichier, par exemple moduletutorial.lua, vous devez utiliser le segment de code suivant.

mymathmodule = require("mymath")
mymathmodule.add(10,20)
mymathmodule.sub(30,20)
mymathmodule.mul(10,20)
mymathmodule.div(30,20)

Pour exécuter ce code, nous devons placer les deux fichiers Lua dans le même répertoire ou vous pouvez également placer le fichier du module dans le chemin du package et il nécessite une configuration supplémentaire. Lorsque nous exécutons le programme ci-dessus, nous obtiendrons la sortie suivante.

30
10
200
1.5

Choses dont il faut se rappeler

  • Placez les modules et le fichier que vous exécutez dans le même répertoire.

  • Le nom du module et son nom de fichier doivent être identiques.

  • Il est recommandé de renvoyer des modules pour la fonction require et par conséquent, le module doit être de préférence implémenté comme indiqué ci-dessus, même si vous pouvez trouver d'autres types d'implémentations ailleurs.

Ancienne méthode de mise en œuvre des modules

Permettez-moi maintenant de réécrire le même exemple à l'ancienne, qui utilise le type d'implémentation package.seeall. Cela a été utilisé dans les versions 5.1 et 5.0 de Lua. Le module mymath est illustré ci-dessous.

module("mymath", package.seeall)

function mymath.add(a,b)
   print(a+b)
end

function mymath.sub(a,b)
   print(a-b)
end

function mymath.mul(a,b)
   print(a*b)
end

function mymath.div(a,b)
   print(a/b)
end

L'utilisation des modules dans moduletutorial.lua est illustrée ci-dessous.

require("mymath")
mymath.add(10,20)
mymath.sub(30,20)
mymath.mul(10,20)
mymath.div(30,20)

Lorsque nous exécutons ce qui précède, nous obtiendrons le même résultat. Mais il est conseillé d'utiliser l'ancienne version du code et elle est supposée moins sécurisée. De nombreux SDK qui utilisent Lua pour la programmation comme le SDK Corona en ont déconseillé l'utilisation.