Factoryfuncties en generators
Gebruik closures als factoryfuncties om geconfigureerde functie-instanties te maken
Factoryfuncties en generators is een gratis Lua Academy-les op CoddyKit. Dit is les 3 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Lua Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Lua Academy bevat in totaal 4 lessen.
Wat is een fabrieksfunctie?
Een fabrieksfunctie is een functie die andere functies maakt en retourneert, geconfigureerd door de argumenten en upvalues ervan.
Eenvoudige vermenigvuldigingsfabriek
Elke aanroep van multiplier retourneert een nieuwe closure die een andere factor vastlegt.
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)) -- 15Configureerbare loggerfabriek
Een loggerfabriek legt een voorvoegseltekenreeks vast en retourneert een logfunctie.
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")Tellergenerator
Een generator houdt een interne toestand bij en produceert bij elke aanroep een nieuwe waarde.
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 4Bereikgenerator
Een bereikgenerator levert waarden van from tot to en retourneert nil wanneer er geen waarden meer zijn.
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) endGedeeltelijke toepassing
Een fabriek past argumenten gedeeltelijk toe om een gespecialiseerde versie van een functie te maken.
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)) -- 15Memoiseringsfabriek
Een fabriek kan een gememoiseerde versie van een dure functie maken.
local function memoize(fn)
local cache = {}
return function(x)
if cache[x] == nil then cache[x] = fn(x) end
return cache[x]
end
endToestandsvolle tokenlexer
Een lexerfabriek legt de invoertekenreeks en positie vast en levert bij elke aanroep het volgende token.
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
endGenerators versus coroutines
Generators op basis van closures zijn eenvoudiger, maar bewaren alle toestand in upvalues. Generators op basis van coroutines zijn krachtiger, omdat ze yield overal in complexe logica kunnen uitvoeren.
Functiesjablonen
Fabrieken maken functiesjablonen — veelgebruikte patronen die bij het maken worden geparametriseerd en met verschillende configuraties vaak opnieuw worden gebruikt.
Curryen
Een gecurryde functie neemt argumenten één voor één aan en retourneert telkens een nieuwe functie totdat alle argumenten zijn opgegeven.
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)) -- 7Vraag over fabrieksfuncties
Wat is een belangrijk kenmerk van fabrieksfuncties?
Samenvatting: fabrieksfuncties
Fabrieksfuncties produceren geconfigureerde closures, waardoor gedeeltelijke toepassing, generators, memoisering en curryen mogelijk worden. Ze behoren tot de krachtigste functionele patronen van Lua.
Leer Lua met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 40
- Lessen
- 159
Veelgestelde vragen
Is de les “Factoryfuncties en generators” gratis?
Ja — je kunt hier op het web alle 3 lessen van het leerpad Lua Academy, waaronder “Factoryfuncties en generators”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus Lua Academy bevat in totaal 4 lessen.
Wat leer ik in “Factoryfuncties en generators”?
Gebruik closures als factoryfuncties om geconfigureerde functie-instanties te maken Je oefent met Lua Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met Lua Academy te beginnen?
Ervaring vooraf is niet nodig. Lua Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 3 van 4.
Hoe lang duurt de les “Factoryfuncties en generators”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over Lua Academy?
Ja. Elke les over Lua Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- Wat zijn upvalues?
- Gedeelde upvalues tussen closures
- Factoryfuncties en generators
- Memoization met closures