LUA – Linguagem de Programação

Provavelmente se o leitor ouvir alguém falar em LUA, irá logo pensar no planeta satélite que o astronauta Neil Armstrong teve o privilégio de pisar pela primeira vez. No entanto neste artigo iremos falar de algo bem diferente, mais ao alcance de uma pessoa comum…

História e Características

A LUA foi desenvolvida em língua portuguesa por uma equipa de programadores do departamento Tecgraf da Universidade Católica do Rio de Janeiro, em código open-source. O objectivo inicial foi a gestão de um projecto industrial da Petrobras.

Graças à sua portabilidade, facilidade de aprendizagem, rapidez e eficiência, rapidamente cresceu para outras áreas de programação, estando actualmente a fazer parte de aplicações informáticas de grande porte.

A LUA é uma linguagem de programação procedural do género de Pascal, C, Python, PHP, Cobol, entre outras. Por este facto qualquer programador terá uma curva de aprendizagem curta e rápida. No entanto, a maior vantagem da LUA é talvez a sua enorme portabilidade que lhe permite interacção com qualquer outra linguagem de programação ou sistema operativo.

Com a sua sintaxe simples, qualquer script é de desenvolvimento rápido, e com um menor tempo de processamento, talvez tenha sido esta característica que cativou a grande empresa de jogos para PC Lucas Arts.

Quem não se lembra do grande título de jogo Escape from Monkey Island na década de 90. Provavelmente o que o leitor não sabe é que LUA foi utilizada nesse jogo para o desenvolvimento da programação responsável pelo controlo da personagem principal, todos os cálculos necessários à movimentação das personagens eram realizados através de scripts em LUA.

Com a entrada no mundo dos jogos, a rapidez e portabilidade da linguagem despertou a atenção de outras entidades. Os Estados Unidos da América foi a próxima conquista, tendo inúmeras empresas do parque industrial de Silicon Valley optado pela LUA para desenvolver grande parte do seu software.

Posteriormente a afirmação final de LUA é consolidada com a interacção dos sistemas do programa espacial da NASA e com alguns dos projectos internos .NET da Microsoft.

A evolução de LUA

Com um crescimento bastante acentuado, cada vez mais programadores tiveram a curiosidade de ler e se informar o porquê de tanto se ouvir falar em LUA. Rapidamente os grupos de debate da comunidade foram aumentando e os projectos novos surgiam a uma rapidez alucinante. Por tudo isto a evolução de LUA teria de passar por algo que se tornou indispensável no nosso dia-a-dia… a internet. Capaz de desenvolver websites completos através da biblioteca CGI/LUA e LuaSQL. Imagine o que será desenvolver um website completamente em CGI/LUA (equivalente para a LUA, tal como o IIS é para o ASP) com recurso a LuaSQL.

Com o backend compilado em ANSI C ou LUA pré-compilado, se um dia decidir trocar o servidor de Windows para Solaris por exemplo, não será necessário desenvolver a plataforma toda de novo, basta recompilar o código C e configurar o novo webserver.

A programação

Como este artigo não pretende demonstrar a totalidade da linguagem de programação LUA, mas sim abordar as principais características que tornam esta linguagem única, recomenda-se a leitura do manual em http://www.lua.org.

Tal como existe no Java a Java Virtual Machine, também LUA tem algo parecido, que tem o nome de Ambiente Global Único.  Este ambiente guarda todas as variáveis globais e definições de funções. É automaticamente activado quando o interpretador é inicializado, e está activo durante toda a execução do script. O Ambiente Global Único é manipulado apenas por código escrito em LUA ou por bibliotecas em C, que utilizem funções da interface C-Lua.

Variáveis

Tal como acontece em PHP ou Python as variáveis globais não precisam de ser declaradas, basta utilizar algo do género:

a = 2.3;

É importante referir que as variáveis globais não têm tipos de dados definidos, apenas o conteúdo define o tipo de variável, existindo sete tipos básicos: nil, number, string, function, cfunction, userdata e table.

Atribuição múltipla de variáveis

De forma a maximizar o código, com a LUA podemos fazer atribuições múltiplas de variáveis:

n, i = “Olá, Mundo” , 2;

Ficando desta forma a variável n com a string Olá, Mundo e a variável i com o valor 2. Troca de valores entre atribuições múltiplas é possível com a atribuição múltipla com troca de valores entre variáveis:

a, b = b, a;

Fazendo com que a receba o valor anteriormente armazenado por b e que b, receba o valor anteriormente armazenada por a, sem necessidade de variáveis temporárias. Imagine o que será os velhos algoritmos de bubblesort para ordenação de dados com esta vantagem.

Concatenação

Para se poder concatenar variáveis com conteúdos string utiliza-se o operador ..:

a = "Olá";
b = ", Mundo";
z = a .. b;

Resultado em z será Olá, Mundo.

Variáveis Locais

Quando se executa ciclos (if..else..end, repeat..until, do..while, etc.) existe a possibilidade de criarmos variáveis locais disponíveis apenas dentro desse ciclo.

a = 2;
if a > 0 then
  local a = ( a + 2 ) * 5;
  print( a );
end
print( a );

O resultado do primeiro print é 20 e do segundo print é 2. Com esta característica de LUA, podemos criar uma variável que apenas dura enquanto o ciclo existir, podendo realizar as operações que quisermos mesmo que a variável tenha o nome igual, e quando sairmos do ciclo a variável original continua com o valor inicial.

Múltiplo retorno em funções

Da mesma forma que é possível realizar múltiplas atribuições em variáveis podemos ter múltiplos retornos de uma função e aliar a múltiplas variáveis:

function num_anterior_e_seguinte ( x )
  anterior = x -1;
  seguinte = x +1;
  return anterior , seguinte;
end
num_actual = 5;
anterior, seguinte = num_anterior_e_seguinte( num_actual );

Com este código podemos fazer uso de uma função que nos irá retornar os números que antecede e segue o introduzido na função. O resultado será: a variável anterior irá conter o número 4 e a variável seguinte irá conter o número 6.

Recursividade

Em linguagens procedurais a recursividade é por vezes muito utilizada. O seu uso em LUA é algo simples e rápido o que torna a sua utilização muito grande:

function factorial( n )
  if n == 0 then
    return 1;
  else
    return n * factorial( n - 1 )
  end
end

Com a utilização desta função pode-se verificar que a utilização da recursividade é algo simples de implementar.

Instalação e ambiente de desenvolvimento

Nesta fase o leitor certamente deve estar desejoso de experimentar a LUA. Então vamos primeiro proceder à instalação. Para poder instalar o Ambiente Geral Único de LUA deverá realizar o download do interpretador em: http://prdownloads.sourceforge.net/luacheia/luacheia5-win32-5.0.1a5.exe?download.

Existem várias opções e versões de download, no entanto vamo-nos centrar na instalação para Windows. Após realizar o download do interpretador vamos então instalar a LUA mantendo o directório sugerido por defeito (c:\luacheia\). Após alguns cliques mais, e estamos aptos a programar em LUA. Para desenvolver código em LUA qualquer editor de texto serve o propósito, até mesmo o simples bloco de notas (Notepad) do Windows, no entanto sugiro a utilização do famoso IDE Eclipse e a instalação do módulo LuaEclipse disponível em: http://luaeclipse.luaforge.net/br/index.html.

O primeiro script de LUA

Para fazermos cumprir a tradição o nosso primeiro script será o famoso “Olá Mundo!” aparecer no nosso ecrã. Para tal abrimos o Bloco de Notas do Windows e incluímos o seguinte código:

print( "Olá Mundo!" );

E está concluído o nosso script. Simples, não é? Ao contrário de várias linguagens que nos obrigam a seguir uma estrutura, em LUA tudo é em função da rapidez… seja ela de processamento ou desenvolvimento.

No fim de guardar na pasta C:\luacheia\ e de aceder pelo DOS (escrevendo cmd no menu executar) basta escrever cd \luacheia\ seguido de luacheia5 olamundo.lua. E aparece-nos no ecrã Olá Mundo!.

O utilizador agora apenas tem de dar largas à sua imaginação e começar a desenvolver em LUA.