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 funções podem ser armazenadas em variáveis e passadas adiante, há 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 dela. Essas 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
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 ele 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 é 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.
Use table.insert() com uma abordagem de função anônima para filtrar os números. Crie a lógica de filtragem diretamente, sem definir uma função nomeada separada.
Lógica:
- Crie uma tabela de resultados vazia
- Percorra a 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 true, adicione o número à tabela de resultados
- Retorne a tabela de resultados filtrada
Parâmetros:
numbers(tabela): Uma tabela no estilo lista contendo valores numéricosthreshold(número): O valor mínimo (exclusivo) para a filtragem
Retorno: Uma tabela contendo apenas números maiores que o limite (tabela)
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 Lógica e Fluxo
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çõesRevisão - Placar de pontuações máximas3Conceitos Avançados de Funções
Retornando Múltiplos ValoresFunções Variádicas (...)Funções como Valores de Primeira ClasseFunções AnônimasO que é um Closure?Recapitulação - Manipulador de Eventos SimplesPratique por conta própria: Compilador de Lua online