Definindo Funções
Em Lua, as funções são usadas para agrupar um conjunto de instruções que podem ser chamadas e executadas em diferentes partes do código. Elas são extremamente úteis para evitar a repetição de código e organizar a lógica do programa.
Atribuindo uma função anônima a uma variável:
Nesse exemplo, uma função anônima é atribuída à variável hello
.
Essa abordagem permite que você chame a função posteriormente usando o nome da
variável seguido de parênteses:
Usando a declaração local function:
Essa forma mais comum de definir funções permite que você declare uma
função com um nome explícito, nesse caso, hello
. A função também pode
receber parâmetros entre os parênteses, se necessário.
Ambas as formas são equivalentes em termos de funcionalidade. No entanto, a
declaração local function
permite que a função seja chamada antes de sua
definição no código, enquanto a atribuição local hello = function()
exige que
a função seja definida antes de ser chamada.
Tip
Omitindo a palavra chave local
você estará criando funções com escopo
global. É recomendado criar funções locais para evitar poluir o escopo
global e evitar conflitos com outras partes do código.
Argumentos de uma função
Ao definir uma função em Lua, você pode especificar os argumentos que ela recebe. Os argumentos são valores que podem ser passados para a função quando ela é chamada e são usados dentro do corpo da função para realizar operações específicas.
Você pode definir múltiplos argumentos separando-os por vírgulas na
definição da função.
Nesse exemplo, a função soma possui dois argumentos: a
e b
.
Esses argumentos são somados e o resultado é impresso:
Retornando um valor ou mais valores
Em Lua, uma função pode retornar um valor ou vários valores. Para retornar
um valor, você pode usar a palavra-chave return
seguida do valor que deseja
retornar. Por exemplo:
Você também pode retornar vários valores de uma função separando-os por vírgulas. Por exemplo:
Argumentos indefinidos de uma função
Em Lua, é possível definir funções com um número indefinido de argumentos.
Isso é útil quando você deseja lidar com uma quantidade variável de valores
passados para a função. Para isso, você pode usar os parâmetros especiais ...
(pontos reticentes) na declaração da função.
Definindo uma Função Closure
Uma das principais utilidades das funções Closure é retorná-las de outras funções, permitindo o acesso ao contexto da função externa.
Neste exemplo, a função counter retorna uma função Closure que incrementa um contador a cada chamada. A variável count é lembrada pela função Closure e mantém seu valor entre as chamadas subsequentes. Ao chamar increment repetidamente, obtemos os valores incrementais do contador.