Las funciones como valores
Almacene y pase funciones
Las funciones como valores es una lección gratuita de Lua Academy en CoddyKit. Esta es la lección 1 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.
Las funciones son valores de primera clase
En Lua, las funciones son valores de primera clase. Esto significa que una función es simplemente un dato: puede almacenarla en una variable, pasarla a otra función, devolverla y conservarla en una tabla.
Esta única idea sustenta toda la programación funcional. Cuando trata las funciones como números o cadenas, puede crear herramientas flexibles y reutilizables.
Almacenar una función en una variable
El nombre que asigna a una función es, en realidad, una variable que contiene el valor de la función. Puede asignar libremente ese valor a otra variable.
Los dos nombres siguientes apuntan a la misma función subyacente, por lo que llamar a cualquiera de ellos ejecuta el mismo código.
local function greet(name)
return "Hello, " .. name
end
local hi = greet
print(greet("Ada"))
print(hi("Lin"))Funciones anónimas
No necesita un nombre para crear una función. Una función anónima se escribe con la sintaxis function ... end y se utiliza directamente como valor.
Asignarla a una variable local equivale a definir una función normal, solo que de forma integrada.
local square = function(x)
return x * x
end
print(square(5))
print(square(9))Funciones como argumentos
Como las funciones son valores, puede pasarlas a otras funciones. Una función que recibe otra función se denomina función de orden superior.
Aquí, apply no sabe qué trabajo debe realizar hasta que se le proporciona una función para ejecutar.
local function apply(f, x)
return f(x)
end
local function double(n) return n * 2 end
print(apply(double, 10))
print(apply(function(n) return n + 1 end, 10))Devolver una función
Una función puede devolver otra función. Esto permite crear funciones bajo demanda, configuradas mediante los argumentos que se les hayan pasado.
A continuación, multiplier crea una función completamente nueva cada vez y conserva el factor que se le proporcionó.
local function multiplier(factor)
return function(x)
return x * factor
end
end
local triple = multiplier(3)
print(triple(4))
print(multiplier(10)(5))Las clausuras capturan variables
Cuando una función devuelta utiliza una variable local de la función que la contiene, captura esa variable. El conjunto formado por la función y las variables capturadas se denomina clausura.
La variable factor capturada permanece disponible mientras exista la clausura, incluso después de que finalice la llamada externa.
local function counter()
local n = 0
return function()
n = n + 1
return n
end
end
local next = counter()
print(next())
print(next())
print(next())Funciones en tablas
Las tablas pueden contener funciones, igual que cualquier otro valor. Así es como Lua crea módulos y objetos: una tabla relaciona nombres con valores de función.
Puede buscar una función mediante una clave y llamarla, o incluso iterar sobre una tabla de operaciones.
local ops = {
add = function(a, b) return a + b end,
sub = function(a, b) return a - b end
}
print(ops.add(2, 3))
print(ops["sub"](9, 4))Una tabla de estrategias
Almacenar funciones en una tabla permite elegir el comportamiento durante la ejecución mediante una clave. Esto sustituye largas cadenas de if-else por una búsqueda clara.
Elegir la operación por nombre mantiene breve el código que realiza la llamada y facilita ampliarlo con nuevas claves.
local dispatch = {
upper = string.upper,
lower = string.lower,
rev = string.reverse
}
local function run(name, s)
return dispatch[name](s)
end
print(run("upper", "lua"))
print(run("rev", "lua"))Callbacks
Un callback es una función que se pasa para poder llamarla más adelante. La biblioteca estándar de Lua utiliza este patrón; por ejemplo, table.sort recibe una función de comparación.
El callback determina la regla, mientras la biblioteca se encarga de iterar y reorganizar los elementos.
local nums = {5, 2, 9, 1}
table.sort(nums, function(a, b)
return a > b
end)
print(table.concat(nums, ", "))Las funciones tienen identidad
Cada valor de función es un objeto distinto. Dos literales de función independientes nunca son iguales, aunque contengan el mismo código.
Sin embargo, una misma función almacenada en dos variables se compara como igual, porque ambos nombres hacen referencia al mismo valor.
local f = function() return 1 end
local g = function() return 1 end
local h = f
print(f == g)
print(f == h)Por qué es importante
Tratar las funciones como valores permite escribir una sola vez herramientas genéricas y personalizarlas con las funciones que se les pasan. La transformación, el filtrado, la aplicación parcial y la composición dependen de esto.
El resto de este curso desarrolla patrones prácticos basados en funciones de primera clase y clausuras.
Comprobación rápida
Compruebe su comprensión de las funciones de primera clase en Lua.
Recapitulación
Las funciones de Lua son valores de primera clase: puede almacenarlas en variables y tablas, pasarlas como argumentos y devolverlas desde otras funciones.
Devolver una función que captura variables locales del contexto que la contiene crea una clausura. Estas ideas son la base de todos los patrones funcionales que se presentan a continuación.
Preguntas frecuentes
¿La lección «Las funciones como valores» es gratis?
Sí — el texto completo de «Las funciones como valores» 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 «Las funciones como valores»?
Almacene y pase funciones 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 1 de 4.
¿Cuánto tiempo toma la lección «Las funciones como valores»?
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
- Las funciones como valores
- map, filter, reduce
- Aplicación parcial
- Componer funciones