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.