Funciones como valores de primera clase
Parte de la sección Logic & Flow del Journey de Lua de Coddy — lección 12 de 54.
En Lua, las funciones son más que simples bloques de código que realizan tareas: son valores que pueden tratarse como cualquier otro tipo de dato. Esto significa que puedes trabajar con funciones de la misma manera que trabajas con números, cadenas o tablas.
Puedes almacenar una función en una variable:
local greet = function()
print("Hello!")
end
greet() -- Salida: Hello!Aquí, la función se asigna a la variable greet, y puedes llamarla como cualquier función regular. Esto abre posibilidades poderosas para la forma en que estructuras tu código.
Las funciones también pueden pasarse como argumentos a otras funciones. Esto es particularmente útil cuando quieres que una función utilice el comportamiento definido en otra:
function executeAction(action)
action()
end
local sayHello = function()
print("Hello from a function!")
end
executeAction(sayHello) -- Salida: Hello from a function!En este ejemplo, executeAction recibe una función como su parámetro y la llama. La función sayHello se pasa de la misma manera que pasarías un número o una cadena.
Las funciones incluso pueden devolver otras funciones. Esto te permite crear funciones dinámicamente basándote en ciertas condiciones o parámetros:
function createMultiplier(factor)
return function(number)
return number * factor
end
end
local double = createMultiplier(2)
print(double(5)) -- Salida: 10Desafío
FácilEscribe una función applyOperation que reciba a, b y operation y devuelva el resultado de aplicar la función de operación a los dos números.
El parámetro operation es una tabla que contiene una función que será llamada con a y b como argumentos.
Lógica:
- Extrae la función de la tabla
operationusando la clave"func" - Llama a esa función con
aybcomo argumentos - Devuelve el resultado
Parámetros:
a(number): Primer númerob(number): Segundo númerooperation(table): Una tabla que contiene una función almacenada en la clave"func"
Devuelve: El resultado de llamar a la función de operación con a y b (number)
Hoja de referencia
En Lua, las funciones son valores de primera clase que pueden almacenarse en variables, pasarse como argumentos y devolverse desde otras funciones.
Almacenar una función en una variable:
local greet = function()
print("Hello!")
end
greet() -- Salida: Hello!Pasar una función como argumento:
function executeAction(action)
action()
end
local sayHello = function()
print("Hello from a function!")
end
executeAction(sayHello) -- Salida: Hello from a function!Devolver una función desde otra función:
function createMultiplier(factor)
return function(number)
return number * factor
end
end
local double = createMultiplier(2)
print(double(5)) -- Salida: 10Pruébalo tú mismo
function applyOperation(a, b, operation)
-- Escribe el código aquí
end
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Logic & Flow
1Iteración avanzada de tablas
Iterar con pairs()Iterar con ipairs()pairs() vs. ipairs()Resumen - Ficha de personaje2Más funciones de la librería table
table.concat()Construcción de tablas y unpack()table.sort()Ordenamiento personalizado con funcionesRepaso - Tabla de puntuaciones altas3Conceptos avanzados de funciones
Retorno de múltiples valoresFunciones variádicas (...)Funciones como valores de primera claseFunciones anónimas¿Qué es un Closure?Resumen - Manejador de eventos simple