Lua Academy · Les

Factoryfuncties en generators

Gebruik closures als factoryfuncties om geconfigureerde functie-instanties te maken

Les 3 van 413 stappen

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))  -- 15

Configureerbare 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 4

Bereikgenerator

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) end

Gedeeltelijke 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))  -- 15

Memoiseringsfabriek

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
end

Toestandsvolle 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
end

Generators 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))  -- 7

Vraag 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.

Gratis beginnen

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

  1. Wat zijn upvalues?
  2. Gedeelde upvalues tussen closures
  3. Factoryfuncties en generators
  4. Memoization met closures
← Terug naar Lua Academy