Funções como valores
Armazene e passe funções.
Funções como valores é uma aula grátis de Lua Academy no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Lua Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Lua Academy inclui 4 aulas no total.
Funções são valores de primeira classe
Em Lua, funções são valores de primeira classe. Isso significa que uma função é apenas um dado: você pode armazená-la em uma variável, passá-la para outra função, retorná-la e mantê-la em uma tabela.
Essa única ideia sustenta toda a programação funcional. Quando você trata funções como números ou strings, pode criar ferramentas flexíveis e reutilizáveis.
Armazenando uma função em uma variável
O nome que você dá a uma função é, na verdade, apenas uma variável que contém o valor da função. Você pode atribuir esse valor livremente a outra variável.
Os dois nomes abaixo apontam para a mesma função subjacente, portanto chamar qualquer um deles executa o mesmo código.
local function greet(name)
return "Hello, " .. name
end
local hi = greet
print(greet("Ada"))
print(hi("Lin"))Funções anônimas
Você não precisa de um nome para criar uma função. Uma função anônima é escrita com a sintaxe function ... end e usada diretamente como um valor.
Atribuí-la a uma variável local equivale a uma definição de função normal, apenas escrita diretamente no local de uso.
local square = function(x)
return x * x
end
print(square(5))
print(square(9))Funções como argumentos
Como funções são valores, você pode passá-las para outras funções. Uma função que recebe outra função é chamada de função de ordem superior.
Aqui, apply não sabe qual trabalho realizar até que você forneça uma função para ela executar.
local function apply(f, x)
return f(x)
end
local function double(n) return n * 2 end
print(apply(double, 10))
print(apply(function(n) return n + 1 end, 10))Retornando uma função
Uma função pode retornar outra função. Isso permite criar funções sob demanda, configuradas pelos argumentos que você forneceu.
Abaixo, multiplier cria uma função totalmente nova a cada chamada, mantendo o fator que você forneceu.
local function multiplier(factor)
return function(x)
return x * factor
end
end
local triple = multiplier(3)
print(triple(4))
print(multiplier(10)(5))Fechamentos capturam variáveis
Quando uma função retornada usa uma variável local da função que a envolve, ela captura essa variável. O conjunto formado pela função e pelas variáveis capturadas é chamado de fechamento.
O factor capturado permanece disponível enquanto o fechamento existir, mesmo depois que a chamada externa tiver terminado.
local function counter()
local n = 0
return function()
n = n + 1
return n
end
end
local next = counter()
print(next())
print(next())
print(next())Funções em tabelas
Tabelas podem conter funções, assim como qualquer outro valor. É assim que Lua cria módulos e objetos: uma tabela associa nomes a valores de função.
Você pode localizar uma função por sua chave e chamá-la, ou até percorrer uma tabela de operações.
local ops = {
add = function(a, b) return a + b end,
sub = function(a, b) return a - b end
}
print(ops.add(2, 3))
print(ops["sub"](9, 4))Uma tabela de estratégias
Armazenar funções em uma tabela permite escolher o comportamento em tempo de execução usando uma chave. Isso substitui longas cadeias de condições por uma consulta simples.
Escolher a operação pelo nome mantém o código que faz a chamada curto e fácil de ampliar com novas chaves.
local dispatch = {
upper = string.upper,
lower = string.lower,
rev = string.reverse
}
local function run(name, s)
return dispatch[name](s)
end
print(run("upper", "lua"))
print(run("rev", "lua"))Funções de retorno de chamada
Uma função de retorno de chamada é uma função que você passa para que ela possa ser chamada mais tarde. A biblioteca padrão de Lua usa esse padrão; por exemplo, table.sort recebe uma função de comparação.
A função de retorno de chamada define a regra; a biblioteca cuida do laço e da reorganização.
local nums = {5, 2, 9, 1}
table.sort(nums, function(a, b)
return a > b
end)
print(table.concat(nums, ", "))Funções têm identidade
Cada valor de função é um objeto distinto. Dois literais de função separados nunca são iguais, mesmo que contenham o mesmo código.
Mas uma única função armazenada em duas variáveis é considerada igual, pois os dois nomes fazem referência ao mesmo valor.
local f = function() return 1 end
local g = function() return 1 end
local h = f
print(f == g)
print(f == h)Por que isso é importante
Tratar funções como valores permite escrever ferramentas genéricas uma vez e personalizá-las com as funções que você fornece. Mapeamento, filtragem, aplicação parcial e composição dependem disso.
O restante deste curso desenvolve padrões práticos com base em funções e fechamentos de primeira classe.
Verificação rápida
Teste sua compreensão sobre funções de primeira classe em Lua.
Recapitulação
As funções em Lua são valores de primeira classe: armazene-as em variáveis e tabelas, passe-as como argumentos e retorne-as de outras funções.
Retornar uma função que captura variáveis locais da função que a envolve cria um fechamento. Essas ideias são a base de todos os padrões funcionais a seguir.
Perguntas Frequentes
A aula “Funções como valores” é grátis?
Sim — o texto completo de “Funções como valores” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Lua Academy, atualize para CoddyKit PRO. O curso de Lua Academy inclui 4 aulas no total.
O que vou aprender em “Funções como valores”?
Armazene e passe funções. Você pratica Lua Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Lua Academy?
Nenhuma experiência prévia é necessária. Lua Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.
Quanto tempo leva a aula “Funções como valores”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Lua Academy?
Sim. Cada aula de Lua Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Funções como valores
- map, filter, reduce
- Aplicação parcial
- Compondo funções