Funciones como valores de primera clase
Parte de la sección Lógica y flujo de control 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 datos. 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 igual que a cualquier función normal. Esto abre posibilidades muy potentes para estructurar tu código.
Las funciones también se pueden pasar como argumentos a otras funciones. Esto resulta especialmente útil cuando quieres que una función use 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 parámetro y la llama. La función sayHello se pasa igual que pasarías un número o una cadena.
Las funciones incluso pueden devolver otras funciones. Esto te permite crear funciones dinámicamente según 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 tome 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 se llamará 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)
Prué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 Lógica y flujo de control
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 simplePractica por tu cuenta: Compilador de Lua online