Menu
Coddy logo textTech

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: 10
challenge icon

Desafio

Fácil

Escreva 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 operation usando a chave "func"
  • Chame essa função com a e b como argumentos
  • Retorne o resultado

Parâmetros:

  • a (número): Primeiro número
  • b (número): Segundo número
  • operation (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: 10

Experimente você mesmo

function applyOperation(a, b, operation)
    -- Escreva o código aqui
end
quiz iconTeste seus conhecimentos

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