0Pricing
Lua Academy · Lección

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

  1. Las funciones como valores
  2. map, filter, reduce
  3. Aplicación parcial
  4. Componer funciones
← Volver a Lua Academy