0Pricing
Lua Academy · Lección

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

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

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

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

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

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

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

Pregunta 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

  1. ¿Qué son los upvalues?
  2. Upvalues compartidos entre closures
  3. Funciones fábrica y generadores
  4. Memoización con closures
← Volver a Lua Academy