Menu
CoddyTech

Funções Anônimas

Parte da seção Lógica e Fluxo do Journey de Lua da Coddy. Lição 13 de 54.

Agora que você entende que as funções podem ser armazenadas em variáveis e passadas adiante, existe uma maneira ainda mais concisa de escrevê-las. Em vez de sempre dar um nome a uma função, você pode criá-la diretamente onde precisar. Elas são chamadas de funções anônimas.

Uma função anônima é simplesmente uma função sem nome. Você a define usando a palavra-chave function, seguida imediatamente por seus parâmetros e corpo:

function(a, b)
    return a + b
end

Isso cria um valor de função que pode ser usado imediatamente. Funções anônimas são particularmente úteis ao passar funções como argumentos para outras funções. Lembra do exemplo de ordenação personalizada de antes? Veja como fica com uma função 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)

Em vez de definir uma função nomeada separada para a comparação, a função é criada diretamente como o segundo argumento de table.sort(). Isso torna o código mais compacto e mantém a lógica de ordenação exatamente onde ela é usada.

challenge icon

Desafio

Fácil

Escreva uma função filterByThreshold que recebe numbers e threshold e retorna uma nova tabela contendo apenas os números maiores que o limite.

O editor já tem uma função auxiliar, filter(list, keep): ela chama keep(value) para cada valor e retorna uma nova tabela com os valores para os quais keep retornou true. Chame filter e passe a verificação como uma função anônima escrita diretamente na chamada, como na lição, que passa uma para table.sort(). Não armazene a verificação em uma variável nem dê um nome a ela.

Parâmetros:

  • numbers (tabela): Uma tabela no formato de lista contendo valores numéricos
  • threshold (número): O valor mínimo (exclusivo) para a filtragem

Retorna: Uma tabela contendo apenas os números maiores que o limite (tabela)

Experimente você mesmo

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)
    -- Escreva o código aqui
end
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Lógica e Fluxo

Pratique por conta própria: Compilador de Lua online