A finalidade geral é de retornar um valor como resposta a uma ação após sua execução. Na linguagem Lua uma função poderá retornar um ou mais valores e até não retornar nenhum valor. Lua faz uso de funções internas e externas.
As funções internas são o conjunto de recursos existentes nas bibliotecas internas de uma linguagem. Lua possui como conjunto de bibliotecas padrão, as bibliotecas: básica; de pacotes; de cadeias de caracteres; manipulação de tabelas; funções matemáticas; entrada e saída; facilidades do sistema operacional e facilidades de depuração.
As funções externas são definidas pelo próprio programador em um programa. Lua oferece alguns recursos operacionais muito atraentes no uso de funções definidas pelo programador. Toda função externa pode ser utilizada com ou sem passagens de parâmetros e pode também ser usada como instrução de comando da linguagem.
Nas operações de manipulação de cadeias há ainda a possibilidade de separar partes de uma cadeia. Para este efeito faz-se uso da função string.sub(texto, início [,fim]), onde texto é a indicação da cadeia que será separada, início é a indicação da posição de separação inicial que pode ser positiva ou negativa e fim - indicação opcional da posição final de separação.
Outro fator de manipulação de cadeias de caracteres é a realização de operações de substituição de caracteres de uma cadeia. Para tanto, use a função de substituição string.gsub(texto, busca, troca, vezes), onde texto é a cadeia de texto definida, busca é o caractere a ser localizado, troca é o caractere que será substituído e vezes indica o número máximo de substituições a serem efetuadas, sendo este último argumento opcional.
Outra ação para manipulação de cadeias é a função string.rep(texto, vezes), onde texto é a cadeia a ser repetida e vezes é a definição do número de repetições.
Outro efeito com cadeias é a obtenção do código da tabela ASCII dos caracteres que formam a cadeia com a função string.byte(texto, início [,fim]), onde texto é a indicação da cadeia que terá seus caracteres convertidos em formato ASCII, início é a indicação da posição de separação inicial que pode ser positiva ou negativa e fim - indicação opcional da posição final de separação.
A ação inversa é conseguida com o uso da função string.char(código1, código2, …, códigoN), onde cada argumento usado é um valor ASCII.
A título de ilustração observe a função para limpeza do monitor de vídeo, fazendo a execução do comando cls na janela de prompt de comando do Microsoft Windows ou o comando clear na janela de comando do Linux/UNIX. Para fazer a execução do comando de limpeza de ecrã cls ou clear deve-se fazer uso da função execute da biblioteca os com a sintaxe os.execute("comando"), onde comando será substituído pelo comando de limpeza do monitor de vídeo do sistema operacional em uso: os.execute("clear") no Linux ou os.execute("cls") no Microsoft Windows.
Um ponto a ser considerado quando do uso de variáveis em Lua, é que a definição de uma variável sempre é feita com escopo global. Caso haja a necessidade de fazer uso de uma variável com escopo local deve-se antes do nome da variável usar a instrução local. O escopo local é determinado pelo bloco no qual a variável é declarada. Uma variável com escopo local que seja declarada fora de qualquer bloco é visível em todo o programa.
Por exemplo, o trecho de código seguinte é iniciado com a variável X global com valor 33. Após a definição condicional (X > 5) outra variável X é definida como local possuindo o valor 5. Desta forma há duas variáveis com o nome X definidas em memória: uma global com valor 33 e outra local com valor 5.
Ao ser executado o trecho de código anterior será apresentado os valores 33, 5 e 33, sendo o valor 33 para a variável X com escopo global e o valor 5 para a variável X com escopo local.
Observe que a definição de uma função é feita com os comandos function e end.
As variáveis utilizadas na linguagem Lua se caracterizam em poder serem variáveis globais ou locais, além de serem também utilizadas como campos de tabela. Uma variável global possui como escopo de visibilidade a capacidade de ser “enxergada” por todo o programa incluindo-se a parte principal e as funções. Quando uma variável é usada e definida em um programa Lua, esta é por padrão considerada com escopo global, a menos que seja definida por meio do comando local.
Outra possibilidade de uso de funções em Lua é o uso de funções com passagem de parâmetro. Considere para tanto, o seguinte programa que solicita a entrada de um valor numérico e apresenta como resultado a fatorial do valor fornecido.
O programa ex12.lua utiliza variáveis locais no código da função FATORIAL(N), além do uso do parâmetro N que define o valor máximo de execução do laço for. Outro detalhe no código da função é o uso do limite do laço como sendo I = 1, N diferente de I = 1, N, 1. O uso do valor 1 após a definição de N é opcional, sendo obrigatório apenas quando o passo da contagem for maior que 1.
Um detalhe no uso de funções que deve ser considerado é em relação ao uso de return para que o valor calculado seja retornado. Este comando é de certa forma opcional, pois quando de sua ausência à função não retornará valor. Neste caso, a função terá um comportamento semelhante à definição de procedimentos na linguagem PASCAL. Normalmente funções sem retorno exigem o uso de variáveis com escopo de visibilidade como globais.
Há uma forma de definição de função em Lua onde se associa a ação da função ao nome de uma variável. Essa forma de uso é também denominada função anônima. O programa seguinte apresenta este modo de operação. Observe os detalhes de uso da linha de código FATORIAL = function(N).
© Acadêmico F.J.T.P da Unifenas - Todos os direitos reservados.