Funções Anônimas
Parte da seção Logic & Flow do Journey de Lua da Coddy — lição 13 de 54.
Agora que você entende que 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 um nome. Você a define usando a palavra-chave function seguida imediatamente por seus parâmetros e corpo:
function(a, b)
return a + b
endIsso 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-se 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 para table.sort(). Isso torna o código mais compacto e mantém a lógica de ordenação exatamente onde ela é usada.
Desafio
FácilEscreva uma função filterByThreshold que receba numbers e threshold e retorne uma nova tabela contendo apenas números maiores que o limite (threshold).
Use table.insert() com uma abordagem de função anônima para filtrar os números. Crie a lógica de filtragem inline sem definir uma função nomeada separada.
Lógica:
- Crie uma tabela de resultado vazia
- Itere através da tabela de números
- Para cada número, use uma função anônima para verificar se ele excede o limite
- Se a verificação retornar verdadeiro, adicione o número à tabela de resultado
- Retorne a tabela de resultado filtrada
Parâmetros:
numbers(table): Uma tabela estilo lista contendo valores numéricosthreshold(number): O valor mínimo (exclusivo) para filtragem
Retorna: Uma tabela contendo apenas números maiores que o limite (table)
Folha de consulta
Uma função anônima é uma função sem nome, definida usando a palavra-chave function seguida por parâmetros e corpo:
function(a, b)
return a + b
endFunções anônimas são úteis ao passar funções como argumentos, mantendo a lógica inline onde ela é usada:
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)Isso cria a função de comparação diretamente como um argumento para table.sort(), tornando o código mais compacto.
Experimente você mesmo
function filterByThreshold(numbers, threshold)
-- Escreva o código aqui
end
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Logic & Flow
1Iteração Avançada de Tabelas
Iterando com pairs()Iterando com ipairs()pairs() vs. ipairs()Revisão - Ficha de Personagem2Mais Funções da Biblioteca Table
table.concat()Construção de tabelas e unpack()table.sort()Ordenação personalizada com funçõesRecapitulação - Placar de recordes3Conceitos Avançados de Funções
Retornando Múltiplos ValoresFunções Variádicas (...)Funções como Valores de Primeira ClasseFunções AnônimasO que é uma Closure?Recapitulação - Manipulador de Eventos Simples