Funções em Lua

Índice
As funções são o principal mecanismo para a abstração de declarações e expressões em Lua, eles podem realizar tarefas específicas, que são geralmente chamadas de procedimentos ou sub-rotinas em outras línguas.
As funções na maioria das vezes são escritas com parênteses e uma lista de argumentos que permitirão realizar uma ação específica, podendo ser que essas funções não necessitem de argumentos, porém os parênteses devem ser especificados, vamos ver um exemplo de funções que usamos como expressões dentro Lua:

Como podemos ver, poderíamos usar funções das duas maneiras descritas, mas há um caso especial em que a função tem um único argumento e esse argumento é um string literal ou um construtor para uma tabela ou array, neste caso os parênteses são opcionais, vejamos:
 print "Hello World" print ("Hello World") dofile 'file.lua' dofile ('file.lua') print [[multi-line array msg]] print ([[multi-line array msg]]) f { var1 = 17, var2 = 30} f ({var1 = 17, var2 = 30}) tipo {} tipo ({})
De acordo com o exemplo, pudemos escrever as funções das duas maneiras, sendo igualmente válidas.
Um programa em Lua Você pode usar funções definidas em C e na própria linguagem, por exemplo, todas as funções padrão na biblioteca de Lua são escritos em C, o que não é relevante para desenvolvedores, já que a invocação de ambos não faz diferença.
Sabendo disso, a definição não difere de outras linguagens, a sintaxe convencional de uma função é regida pelo nome da função, uma lista de parâmetros e o corpo da função, que é uma lista de declarações, vamos ver um exemplo para ilustrar o que foi explicado:
 operação da função (var) soma local = 0 soma = var + 6 retorno soma final
Já temos nossa função, porém dessa forma não é muito útil, pois precisa ser invocada enviando o parâmetro de que precisa, para isso podemos adicionar mais uma linha ao nosso código para invocá-la:
 função operação (var) soma local = 0 soma = var + 6 retorno soma final impressão (operação (57))
Se executarmos nosso exemplo em nosso terminal, podemos ver como nosso programa recebe o parâmetro e de acordo com as operações definidas em nossa função, ele retorna um valor:

PROLONGAR

Algo que podemos destacar das funções em Lua, é que os parâmetros funcionam como variáveis ​​locais, pois são inicializados com os valores que recebem na chamada da função. Além disso, podemos invocar uma função com um número diferente de argumentos definidos na função, Lua adapta-se a isso de uma forma que o faz com atribuição múltipla, um tópico que abordamos no último tutorial, onde os argumentos extras são descartados e os parâmetros extras obtêm o tipo de valor nada, por exemplo, vamos imaginar que temos a seguinte função:
 function multiple_function (a, b) retorna a ou b end
Vamos ver como na parte do código a seguir chamamos a função com parâmetros diferentes e, no lado direito, como a atribuição é realizada:
 f (8) a = 8, b = nil f (8, 15) a = 8, b = 15 f (8, 15, 4) a = 8, b = 15 (o valor 4 é descartado)
Embora esse comportamento possa levar a erros de programação, também é útil, especialmente para argumentos padrão.
Um recurso não convencional, mas bastante útil do Lua, é a capacidade de retornar vários resultados, até mesmo funções de linguagem predefinidas podem fazer isso. Um exemplo disso é a função string.find, que procura um padrão de ocorrência em uma determinada string, esta função retorna dois índices, o primeiro é o índice onde este padrão começa e o segundo é onde ele termina, vamos ver um exemplo prático do uso desta função que podemos fazer perfeitamente em nosso console interativo:

As funções que escrevemos Lua eles também podem retornar resultados múltiplos, para isso só temos que listá-los após nosso retorno, vamos ver um exemplo onde criamos uma função para localizar o maior de uma lista de elementos em um array e sua posição nele:
 função valor máximo (a) mínimo local = 1 local m = a [mínimo] para i, val em ipairs (a) faça se val> m então mínimo = i; m = val end end return m, mínimo final de impressão (valor máximo ({8,10,23,12,5}))
Como podemos ver, nossa função é bastante simples e em nosso retorno ela retorna dois valores, que neste caso de acordo com o que estamos enviando devemos retornar 23 como o maior número e 3 como a posição, vejamos:

PROLONGAR

Além da funcionalidade de retornar vários resultados, Lua você também pode receber um número variável de argumentos, por exemplo, ao longo dos tutoriais, usamos a função impressão com um, dois e até três argumentos, ou seja, pode receber um número variável de argumentos, mas à medida que isso acontece, também podem as funções que desenvolvemos em Lua, Vejamos um exemplo disso:
 função example_function (…) local s = 0 para i, v em ipairs {…} do s = s + v end return s end print (example_function (8, 19, 30, 14, 10))
Se formos observadores na definição da nossa função, temos três pontos (… ) dentro dos parênteses, isso indica que nossa função aceita um número variável de argumentos, e quando a função é chamada todos os argumentos enviados são coletados internamente e depois processados ​​com a função ipairsVamos ver a saída de nossa função que é responsável por adicionar todos os argumentos enviados a ela:

PROLONGAR

Como vemos esta característica de Lua É bastante útil, pois nos permite definir nossa função sem ter o conhecimento de quantos argumentos vamos passar para ela, podemos até dizer que essa funcionalidade é um pouco semelhante ao que é feito com o declarações preparadas para lidar com operações com banco de dados em linguagens como PHP ou Java.
Enviando argumentos em Lua é posicional, ou seja, quando invocamos uma função, esses argumentos correspondem aos parâmetros de acordo com suas posições, o primeiro argumento corresponde ao primeiro parâmetro e assim por diante, embora às vezes não faça mal especificar os argumentos pelo nome.
Esta funcionalidade é semelhante aos argumentos variáveis, porém ao definir os nomes para nossos argumentos, tratá-los é muito mais simples, onde apenas usando uma tabela ou arranjo podemos fazer esta funcionalidade, algo que é muito útil se nossa função usar algum desses parâmetros opcionalmente, vamos ver a seguinte chamada para uma função que recebe uma certa quantidade de parâmetros para construir uma janela:
 criar_janela {x = 0, y = 0, largura = 0, altura = 200, título = 'Janela Lua', fundo = "azul", bordas = verdadeiro}
Desta forma, a função create_window Você está livre para verificar esses argumentos por nome, se desejar, vamos ver como recebemos esses argumentos em nossa função e o que podemos fazer com eles:
 função create_window (options) - verificar as opções obrigatórias se tipo (options.title) ~ = "string" then error ("sem título") elseif type (options.width) ~ = "número" then error ("sem medida de largura" ) elseif type (options.height) ~ = "number" then error ("sem medição de altura") end - aplicamos as opções create_window (options.title, options.x ou 0, options.y ou 0, options .width, options.height, options.background ou "white", options.edges) End
Como podemos ver, as possibilidades em nossos programas são muito maiores com esta funcionalidade e, embora este exemplo seja ilustrativo, ele nos permite ver como podemos aplicar os argumentos nomeados dentro de nossas funções.
É assim que terminamos este tutorial, onde aprendemos como lidar com funções em Lua, indo da sintaxe convencional que podemos encontrar em outras linguagens às características da linguagem como os múltiplos resultados, argumentos variáveis ​​e a possibilidade de nomear os argumentos que enviamos para nossas funções. Desta forma, adicionando muito mais poder aos nossos programas, incluindo esses tipos de recursos e mantendo a simplicidade com que Lua estamos acostumados a isso.Gostou e ajudou este tutorial?Você pode recompensar o autor pressionando este botão para dar a ele um ponto positivo
wave wave wave wave wave