Menu
CoddyTech

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, hay una forma aún más concisa de escribirlas. En lugar de darle 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
end

Esto 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 ordenamiento personalizado de antes? Así 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 función con nombre aparte para la comparación, la función se crea directamente como 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 usa.

challenge icon

Desafío

Fácil

Escribe una función filterByThreshold que reciba numbers y threshold y devuelva una nueva tabla que contenga solo los números mayores que el umbral.

El editor ya tiene una función auxiliar, filter(list, keep): llama a keep(value) para cada valor y devuelve una nueva tabla con los valores para los que keep devolvió true. Llama a filter y pasa la comprobación como una función anónima escrita directamente en la llamada, como en la lección, donde se pasa una a table.sort(). No guardes la comprobación en una variable ni le asignes un nombre.

Parámetros:

  • numbers (tabla): Una tabla de estilo lista que contiene valores numéricos
  • threshold (número): El valor mínimo (exclusivo) para el filtrado

Devuelve: Una tabla que contiene solo números mayores que el umbral (tabla)

Pruébalo tú mismo

local function filter(list, keep)
    local result = {}
    for _, value in ipairs(list) do
        if keep(value) then
            table.insert(result, value)
        end
    end
    return result
end

function filterByThreshold(numbers, threshold)
    -- Escribe el código aquí
end
quiz iconPonte a prueba

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

Practica por tu cuenta: Compilador de Lua online