Fonctions fabrique et générateurs
Utilisez des fermetures comme fonctions fabrique pour produire des instances de fonctions configurées.
Fonctions fabrique et générateurs est une leçon Lua Academy gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Lua Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Lua Academy comprend 4 leçons au total.
Qu’est-ce qu’une fonction fabrique ?
Une fonction fabrique est une fonction qui crée et renvoie d’autres fonctions, configurées par ses arguments et ses variables capturées.
Fabrique simple de multiplicateurs
Chaque appel à multiplier renvoie une nouvelle fermeture qui capture un factor différent.
local function multiplier(factor)
return function(x) return x * factor end
end
local double = multiplier(2)
local triple = multiplier(3)
print(double(5)) -- 10
print(triple(5)) -- 15Fabrique configurable de journalisation
Une fabrique de journalisation capture une chaîne de préfixe et renvoie une fonction de journalisation.
local function makeLogger(prefix)
return function(msg)
print("[" .. prefix .. "] " .. msg)
end
end
local info = makeLogger("INFO")
local warn = makeLogger("WARN")
info("started")
warn("low memory")Générateur de compteurs
Un générateur conserve un état interne et produit une nouvelle valeur à chaque appel.
local function counter(start, step)
local n = start - step
return function()
n = n + step
return n
end
end
local evens = counter(0, 2)
print(evens(), evens(), evens()) -- 0 2 4Générateur d’intervalles
Un générateur d’intervalles produit les valeurs de from à to et renvoie nil lorsqu’il est épuisé.
local function range(from, to, step)
step = step or 1
local i = from - step
return function()
i = i + step
if i <= to then return i end
end
end
for v in range(1, 5) do print(v) endApplication partielle
Une fabrique applique partiellement des arguments pour créer une version spécialisée d’une fonction.
local function partial(fn, ...)
local args = {...}
return function(...)
local all = {table.unpack(args)}
for _, v in ipairs({...}) do all[#all+1] = v end
return fn(table.unpack(all))
end
end
local add = function(a,b) return a+b end
local add10 = partial(add, 10)
print(add10(5)) -- 15Fabrique avec mémorisation
Une fabrique peut construire une version mémorisée d’une fonction coûteuse.
local function memoize(fn)
local cache = {}
return function(x)
if cache[x] == nil then cache[x] = fn(x) end
return cache[x]
end
endAnalyseur lexical à état
Une fabrique d’analyseur lexical capture la chaîne d’entrée et la position, puis produit le jeton suivant à chaque appel.
local function lexer(input)
local pos = 1
return function()
if pos > #input then return nil end
local token = input:match("%S+", pos)
if token then pos = pos + #token + 1 end
return token
end
endGénérateurs ou coroutines
Les générateurs fondés sur des fermetures sont plus simples, mais stockent tout leur état dans des variables capturées. Les générateurs fondés sur des coroutines sont plus puissants et permettent d’utiliser yield n’importe où dans une logique complexe.
Modèles de fonctions
Les fabriques créent des modèles de fonctions : des motifs courants paramétrés au moment de leur création, puis réutilisés de nombreuses fois avec différentes configurations.
Évaluation par currying
Une fonction obtenue par currying reçoit les arguments un par un et renvoie une nouvelle fonction jusqu’à ce que tous les arguments soient fournis.
local function curry2(fn)
return function(a)
return function(b)
return fn(a, b)
end
end
end
local curriedAdd = curry2(function(a,b) return a+b end)
print(curriedAdd(3)(4)) -- 7Question sur les fabriques
Quelle est une caractéristique essentielle des fonctions fabriques ?
Récapitulatif : fonctions fabriques
Les fonctions fabriques produisent des fermetures configurées, ce qui permet l’application partielle, les générateurs, la mémorisation et le currying. Elles constituent l’un des modèles fonctionnels les plus puissants de Lua.
Questions Fréquemment Posées
La leçon « Fonctions fabrique et générateurs » est-elle gratuite ?
Oui — le texte complet de « Fonctions fabrique et générateurs » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Lua Academy, passe à CoddyKit PRO. Le cours Lua Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Fonctions fabrique et générateurs » ?
Utilisez des fermetures comme fonctions fabrique pour produire des instances de fonctions configurées. Tu pratiques Lua Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Lua Academy ?
Aucune expérience préalable n'est requise. Lua Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.
Combien de temps prend la leçon « Fonctions fabrique et générateurs » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Lua Academy ?
Oui. Chaque leçon Lua Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Que sont les upvalues ?
- Upvalues partagées entre fermetures
- Fonctions fabrique et générateurs
- Mémorisation avec des fermetures