Aller au contenu principal
ShadowAcademy

Les langages / Lua / Portee et closures

Modules et scope

Les modules permettent d'organiser le code en fichiers séparés. Lua utilise 'require' pour charger des modules et 'local' pour contrôler la portée des variables. C'est essentiel pour créer des applications bien structurées.

Portée des variables (scope)

-- Variable globale (accessible partout)
variableGlobale = "Je suis globale"

-- Variable locale (limitée au bloc)
local variableLocale = "Je suis locale"

function testerScope()
  print(variableGlobale)   -- Accessible
  -- print(variableLocale) -- Erreur! Pas accessible
  
  local temp = "Temporaire"
  print(temp)
end

testerScope()
-- print(temp)  -- Erreur! temp n'existe pas ici

Créer un module simple

-- Fichier: math_utils.lua
local MathUtils = {}

function MathUtils.carre(x)
  return x * x
end

function MathUtils.cube(x)
  return x * x * x
end

function MathUtils.moyenne(...)
  local args = {...}
  local somme = 0
  for i, v in ipairs(args) do
    somme = somme + v
  end
  return somme / #args
end

return MathUtils

Utiliser un module

-- Charger le module
local MathUtils = require("math_utils")

-- Utiliser les fonctions du module
print(MathUtils.carre(5))      -- 25
print(MathUtils.cube(3))       -- 27
print(MathUtils.moyenne(10, 20, 30))  -- 20

-- Alias pour simplifier
local carre = MathUtils.carre
print(carre(7))  -- 49

Module avec données privées

-- Fichier: compteur.lua
local Compteur = {}

-- Variable privée (local)
local valeur = 0

-- Méthodes publiques
function Compteur.incrementer()
  valeur = valeur + 1
end

function Compteur.decrementer()
  valeur = valeur - 1
end

function Compteur.obtenir()
  return valeur
end

function Compteur.reinitialiser()
  valeur = 0
end

return Compteur

-- Utilisation:
-- local compteur = require("compteur")
-- compteur.incrementer()
-- print(compteur.obtenir())  -- 1

2 exercices pour cette lecon

Les exercices demandent un compte : il faut bien enregistrer votre progression quelque part. La lecture, elle, reste libre. Creer un compte

  • Closure (fermeture) difficile 35 XP
  • Module simple difficile 35 XP