Funções como Valores de Primeira Classe
Parte da seção Lógica e Fluxo do Journey de Lua da Coddy. Lição 12 de 54.
Em Lua, as 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 a forma como você estrutura seu código.
Funções também podem ser passadas como argumentos para outras funções. Isso é particularmente útil quando você quer 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 parâmetro e a chama. A função sayHello é passada da mesma forma que você passaria um número ou uma string.
As funções podem até mesmo retornar outras funções. Isso permite criar funções dinamicamente com base em determinadas 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 receba a, b e operation e retorne o resultado da aplicação da função de operação aos dois números.
O parâmetro operation é uma tabela que contém 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(number): Primeiro númerob(number): Segundo númerooperation(table): Uma tabela contendo uma função armazenada na chave"func"
Retorno: O resultado da chamada da função de operação com a e b (number)
Experimente 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 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