Funciones fábrica y generadores
Utilice closures como funciones fábrica para producir instancias de funciones configuradas.
Funciones fábrica y generadores es una lección gratuita de Lua Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Lua Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Lua Academy incluye 4 lecciones en total.
¿Qué es una función factory?
Una función factory es una función que crea y devuelve otras funciones, configuradas mediante sus argumentos y upvalues.
Factory simple de multiplicadores
Cada llamada a multiplier devuelve un nuevo closure que captura un factor diferente.
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)) -- 15Factory de loggers configurable
Una factory de loggers captura una cadena de prefijo y devuelve una función de registro.
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")Generador de contadores
Un generador mantiene un estado interno y produce un nuevo valor en cada llamada.
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 4Generador de rangos
Un generador de rangos produce valores desde from hasta to y devuelve nil cuando se agotan.
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) endAplicación parcial
Una factory aplica parcialmente argumentos para crear una versión especializada de una función.
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)) -- 15Factory con memoización
Una factory puede crear una versión memoizada de una función costosa.
local function memoize(fn)
local cache = {}
return function(x)
if cache[x] == nil then cache[x] = fn(x) end
return cache[x]
end
endAnalizador léxico de tokens con estado
Una factory de analizadores léxicos captura la cadena de entrada y la posición, y produce el siguiente token en cada llamada.
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
endGeneradores frente a coroutines
Los generadores basados en closures son más sencillos, pero almacenan todo el estado en upvalues. Los generadores basados en coroutines son más potentes y permiten usar yield en cualquier punto de una lógica compleja.
Plantillas de funciones
Las factories crean plantillas de funciones: patrones comunes parametrizados durante la creación, que pueden reutilizarse muchas veces con distintas configuraciones.
Currificación
Una función currificada recibe los argumentos de uno en uno y devuelve una nueva función hasta que se proporcionan todos los argumentos.
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)) -- 7Pregunta sobre factories
¿Cuál es una característica fundamental de las funciones factory?
Resumen: funciones factory
Las funciones factory producen closures configurados, lo que permite la aplicación parcial, los generadores, la memoización y la currificación. Son uno de los patrones funcionales más potentes de Lua.
Preguntas frecuentes
¿La lección «Funciones fábrica y generadores» es gratis?
Sí — el texto completo de «Funciones fábrica y generadores» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Lua Academy, actualiza a CoddyKit PRO. El curso de Lua Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Funciones fábrica y generadores»?
Utilice closures como funciones fábrica para producir instancias de funciones configuradas. Practicas Lua Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Lua Academy?
No se requiere experiencia previa. Lua Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.
¿Cuánto tiempo toma la lección «Funciones fábrica y generadores»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Lua Academy?
Sí. Cada lección de Lua Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- ¿Qué son los upvalues?
- Upvalues compartidos entre closures
- Funciones fábrica y generadores
- Memoización con closures