Funciones anónimas
Parte de la sección Lógica y flujo de control del Journey de Lua de Coddy. Lección 13 de 54.
Ahora que entiendes que las funciones se pueden almacenar en variables y pasar de un lado a otro, existe una forma aún más concisa de escribirlas. En lugar de dar siempre un nombre a una función, puedes crearla directamente donde la necesites. Estas se llaman funciones anónimas.
Una función anónima es simplemente una función sin nombre. La defines usando la palabra clave function, seguida inmediatamente de sus parámetros y su cuerpo:
function(a, b)
return a + b
endEsto crea un valor de función que se puede usar de inmediato. Las funciones anónimas son especialmente útiles al pasar funciones como argumentos a otras funciones. ¿Recuerdas el ejemplo de ordenación personalizada anterior? Así es como se ve con una función anónima:
local players = {
{name = "Alice", score = 150},
{name = "Bob", score = 200},
{name = "Charlie", score = 175}
}
table.sort(players, function(a, b)
return a.score > b.score
end)En lugar de definir una function con nombre independiente para la comparación, la function se crea directamente como el segundo argumento de table.sort(). Esto hace que el código sea más compacto y mantiene la lógica de ordenación justo donde se utiliza.
Desafío
FácilEscribe una función filterByThreshold que tome numbers y threshold y devuelva una tabla nueva que contenga únicamente los números mayores que el umbral.
Usa table.insert() con un enfoque de función anónima para filtrar los números. Crea la lógica de filtrado en línea sin definir una función independiente con nombre.
Lógica:
- Crea una tabla de resultados vacía
- Itera por la tabla de números
- Para cada número, usa una función anónima para comprobar si supera el umbral
- Si la comprobación devuelve true, añade el número a la tabla de resultados
- Devuelve la tabla de resultados filtrada
Parámetros:
numbers(tabla): Una tabla de estilo lista que contiene valores numéricosthreshold(número): El valor mínimo (exclusivo) para el filtrado
Devuelve: Una tabla que contiene únicamente los números mayores que el umbral (tabla)
Pruébalo tú mismo
function filterByThreshold(numbers, threshold)
-- 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