Funções como Valores de Primeira Classe
Parte da seção Logic & Flow do Journey de Lua da Coddy — lição 12 de 54.
Em Lua, funções são mais do que apenas blocos de código que realizam tarefas—elas são valores que podem ser tratados como qualquer outro tipo de dado. Isso significa que você pode trabalhar com funções da mesma forma que trabalha com números, strings ou tabelas.
Você pode armazenar uma função em uma variável:
local greet = function()
print("Hello!")
end
greet() -- Saída: Hello!Aqui, a função é atribuída à variável greet, e você pode chamá-la como qualquer função comum. Isso abre possibilidades poderosas para como você estrutura seu código.
Funções também podem ser passadas como argumentos para outras funções. Isso é particularmente útil quando você deseja que uma função use o comportamento definido em outra:
function executeAction(action)
action()
end
local sayHello = function()
print("Hello from a function!")
end
executeAction(sayHello) -- Saída: Hello from a function!Neste exemplo, executeAction recebe uma função como seu parâmetro e a chama. A função sayHello é passada exatamente como você passaria um número ou uma string.
Funções podem até retornar outras funções. Isso permite que você crie funções dinamicamente com base em certas condições ou parâmetros:
function createMultiplier(factor)
return function(number)
return number * factor
end
end
local double = createMultiplier(2)
print(double(5)) -- Saída: 10Desafio
FácilEscreva uma função applyOperation que recebe a, b e operation e retorna o resultado da aplicação da função de operação aos dois números.
O parâmetro operation é uma tabela contendo uma função que será chamada com a e b como argumentos.
Lógica:
- Extraia a função da tabela
operationusando a chave"func" - Chame essa função com
aebcomo argumentos - Retorne o resultado
Parâmetros:
a(número): Primeiro númerob(número): Segundo númerooperation(tabela): Uma tabela contendo uma função armazenada na chave"func"
Retorna: O resultado de chamar a função de operação com a e b (número)
Folha de consulta
Em Lua, funções são valores de primeira classe que podem ser armazenados em variáveis, passados como argumentos e retornados de outras funções.
Armazene uma função em uma variável:
local greet = function()
print("Hello!")
end
greet() -- Saída: Hello!Passe uma função como um argumento:
function executeAction(action)
action()
end
local sayHello = function()
print("Hello from a function!")
end
executeAction(sayHello) -- Saída: Hello from a function!Retorne uma função de outra função:
function createMultiplier(factor)
return function(number)
return number * factor
end
end
local double = createMultiplier(2)
print(double(5)) -- Saída: 10Experimente você mesmo
function applyOperation(a, b, operation)
-- 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