As linguagens de programação existentes, como PHP, Java e C#, geralmente são desenvolvidas por pessoas estrangeiras. Contudo, a linguagem Lua é considerada brasileira, criada nos laboratórios de uma faculdade carioca e pensada principalmente para o desenvolvimento de jogos.
Contudo, alguns tipos de dados e a sintaxe da linguagem Lua podem ser de difícil compreensão para pessoas iniciantes na área de desenvolvimento. Além disso, programadores ou programadoras podem apresentar dificuldades em configurar o ambiente para executar um script em Lua.
Você deve encontrar facilmente conteúdo em português sobre a Lua, por ser uma linguagem brasileira. Além disso, como se trata de uma linguagem de código livre, você pode contribuir com melhorias desejadas quando julgar necessário.
Quer conhecer mais a fundo a linguagem Lua? Então, vamos nessa! No artigo a seguir, abordaremos os seguintes tópicos:
- O que é a linguagem Lua?
- Entenda a história da linguagem de programação Lua!
- Para que serve a linguagem Lua e quais as suas principais aplicações?
- Quais as principais vantagens e desvantagens da linguagem Lua?
- Por que aprender a linguagem Lua? Vale a pena?
- Conheça os princípios da linguagem Lua!
- Conheça a sintaxe da linguagem Lua na prática!
- Como começar a programar em Lua na prática? Instalando o interpretador!
O que é a linguagem Lua?
A linguagem Lua tem um alto nível de portabilidade, é leve e apresenta alguns paradigmas da programação. São eles:
- É uma linguagem orientada a objetos;
- É uma linguagem que permite a programação funcional;
- É uma linguagem orientada a dados.
Lua tem uma tipagem de dados funcionando de forma dinâmica, ou seja, os valores jamais terão tratamento com um tipo errado, conforme ocorre com as linguagens não tipadas. Além disso, é uma linguagem interpretada e precisa de um compilador para executar trechos de códigos existentes.
Em Lua, também podemos ter um autogerenciamento da memória. Isso significa que ela pode ser gerenciada automaticamente, simplificando processos como a criação de interfaces e prevenção de erros que possam ocorrer na alocação de memória, erros complexos e de difícil resolução.
Dessa forma, a linguagem oferece o tratamento para campos do tipo texto (strings) e estruturas de dados como tabelas. É também uma linguagem altamente recomendada para a construção da lógica de jogos digitais.
No decorrer do artigo, serão abordados esses tópicos. Vejamos agora um pouco da história dessa linguagem de programação.
Entenda a história da linguagem de programação Lua!
A linguagem Lua foi criada no ano de 1993, nos laboratórios da PUC-Rio, pelos pesquisadores Roberto Ierusalimschy, Luiz Henrique de Figueiredo e Waldemar Celes. Portanto, conforme dito anteriormente, Lua é uma linguagem criada por brasileiros.
Ela foi pensada em conjunto com a empresa Petrobras, cujo intuito era o desenvolvimento de interfaces para programas de teste e simulação. Desse desenvolvimento, surgiu o programa “Gráfico Mestre”, para auxiliar na visualização de perfis geológicos da Petrobras.
A necessidade da Petrobras era observar as escavações para conseguir petróleo, tarefa fundamental da empresa. Com a criação da linguagem Lua, a empresa conseguiu montar um roteiro detalhado para conduzir as escavações de forma correta. Logo, os resultados foram a economia de tempo e a precisão nas escavações.
Depois desse projeto, em 1994, foi desenvolvida uma intranet para o laboratório de informática da Puc-Rio, ou seja, um ambiente de internet exclusivo para aquela instituição. Nessa época, pouco se falava em internet no Brasil e, em 1996, esse ambiente foi ampliado para todos os estudantes da faculdade carioca.
Mas, afinal, por que o nome Lua? No planejamento inicial, em 1993, a ideia era criar uma linguagem maior denominada SOL (Simple Object Language). Mas esse projeto foi descontinuado, e houve uma redução de plano pelos pesquisadores. Assim, foi feita a sugestão: já que será desenvolvido algo menor que o Sol, vamos batizar isso de Lua.
A primeira empresa a utilizar a linguagem Lua para jogos foi a LucasArts, no jogo Grim Fandango. Depois disso, a Microsoft também fez a utilização de Lua para jogos do XBOX, como o Universia, em 2002, e em ferramentas para design gráfico, como o Photoshop Lightroom.
Mesmo sendo criada no Brasil, a linguagem Lua é reconhecida internacionalmente e utilizada em alguns países, como Japão, Alemanha, Rússia, entre outros.
Para que serve a linguagem Lua e quais as suas principais aplicações?
A linguagem Lua é muito utilizada para o desenvolvimento de jogos. É a linguagem mais usada para esse fim.
Além disso, apresenta um potencial muito grande para a construção de aplicações hipermídia, que envolvam o Sistema Brasileiro de TV Digital (SBTVD).
Da mesma forma, a linguagem Lua pode ser utilizada para construção de robôs e sistemas de inteligência artificial. Um exemplo disso foi o middleware desenvolvido em conjunto com a PUC-Rio e a Universidade Federal da Paraíba (UFPB), denominado Ginga. Nele, há um suporte comunicativo de algumas operações cotidianas, como transações bancárias e envio de mensagens.
Quais as principais vantagens e desvantagens da linguagem Lua?
Vejamos a seguir, algumas vantagens e desvantagens que essa linguagem apresenta:
Vantagens:
- Facilidade de encontrar materiais sobre a linguagem Lua na internet;
- Se comparada a outras linguagens interpretadas como Perl e Python, tem um desempenho melhor;
- Um trecho de código pode ser rodado em vários locais sem precisar de alterações, ou seja, é portátil;
- É uma linguagem pequena em relação ao tamanho, ou seja, é leve para ser utilizada em projetos.
Desvantagens:
- Tem alto risco de vulnerabilidade, como injeção de comandos ou presença de malwares em arquivos;
- Apesar de ter sido criada no Brasil, tem mais fama entre pessoas estrangeiras do que entre brasileiros e brasileiras;
- Apresenta um desempenho inferior à linguagem C.
Por que aprender a linguagem Lua? Vale a pena?
Vale muito a pena aprender essa linguagem para iniciar na carreira de programador ou programadora. Essa linguagem está presente em partes dos aplicativos utilizados em TVs digitais e é utilizada em conjunto com o Java, por exemplo, para desenvolver jogos, o que abre boas possibilidades de atuação.
Além disso, por ser uma linguagem com alto nível de clareza e facilidade de aprendizado, ela pode ser utilizada na construção de robôs e de sistemas de inteligência artificial, no lugar de linguagens como o Python.
Conheça os princípios da linguagem Lua!
Vejamos a seguir alguns princípios básicos existentes na linguagem Lua:
Convenções
Em Lua, para declarar uma variável, podemos utilizar qualquer conjunto de letras desejado pelos desenvolvedores ou desenvolvedoras. Contudo, esse conjunto não pode ser iniciado por um numeral.
A linguagem tem algumas expressões reservadas, demonstradas no decorrer desse artigo. Expressões como and, if, function, repeat, until e false são palavras reservadas da linguagem Lua que não podem ser utilizadas como identificadores.
Além disso, se escrevermos false, será diferente de escrevermos FALSE. Isso significa que Lua é uma linguagem case-sensitive, que diferencia letras minúsculas de maiúsculas. Portanto, é necessário cuidado com o uso de letras em caixa alta ou baixa.
Para escrever um comentário em Lua, utilizamos dois traços ou hifens (—) e escrevemos o que desejamos após os sinais gráficos. Esse tipo de comentário seria para uma linha inteira. Para comentarmos um bloco de código, utilizamos, além dos hifens, os colchetes, da seguinte forma: (–[[ código –]]).
Assim, um valor numérico na linguagem pode ser escrito em sua forma tradicional, como decimal (3, 4, 5.5), ou também pode ser representado por um número hexadecimal (0.31416E1, 314.16e-2).
Tipos de Valores
Como a linguagem Lua é tipada de forma dinâmica, somente os valores possuem tipos, e não as variáveis. Ou seja, todos os valores têm a possibilidade de possuir seu próprio tipo.
Os tipos básicos de valores existentes na linguagem Lua são os seguintes:
- nil → tem como propósito ser diferente dos demais tipos de valores. Esse valor é assumido nas variáveis por padrão, quando não são declarados.
- boolean → são os valores verdadeiro (true) ou falso (false).
- number → tipo que representa os números reais e números que possuam duas casas decimais, como 3, 4.52 e 8.20.
- string → tipo que representa conjuntos de caracteres. No caso dessa linguagem, as strings existentes são de caracteres de oito bits.
Existem mais tipos de dados que seriam as funções e as tables. Vamos explicá-los logo mais.
Tables e estruturas de dados
A linguagem Lua tem apenas uma estrutura de dados, que seriam as tables ou tabelas. As tables são similares aos arrays ou vetores que conhecemos de outras linguagens como Java e PHP. Para que uma table seja criada, utilizamos o sinal de chaves ({}).
Desse modo, as tables são responsáveis por implementar arrays associativos (que contenham chave e valor), desde que não seja utilizado o valor nil. Em uma tabela, você pode declarar quantos valores quiser, pois elas não possuem um limite fixo.
De modo geral, as tabelas em Lua são objetos, ou seja, são estruturas que têm uma propriedade como nome, sendo a chave e um valor associado a ela. Para representar um dado existente na tabela, fazemos da seguinte maneira:
nome_tabela [indice];
Vejamos um pequeno exemplo a seguir de como funciona as tables:
r = {} --criação de uma tabela denominada "r"
k = s
t[k] = 2.44 -- inserção de um novo registro na table, com a chave = "s" e o valor = 2.44
t[10] = "bar" -- inserção de um novo registro na table, com a chave = 10 e o valor = "bar"
Caso o exemplo acima não tenha ficado explícito para você, não se preocupe, pois mais adiante será exibido um exemplo prático de um script da linguagem Lua. Vejamos agora os tipos de variáveis existentes nessa linguagem.
Variáveis
Na linguagem Lua, temos três tipos distintos de variáveis: locais, globais e campos de table. Entenda melhor a seguir:
Variáveis locais
Para utilizar uma variável local em Lua, devemos utilizar a palavra reservada local antes da declaração de uma variável, conforme o exemplo a seguir:
local idade = 25;
No exemplo acima, a variável idade seria uma variável local, similar à variável let, utilizada no JavaScript. Ela só é utilizada em um bloco de código de uma função, por exemplo. Fora desse bloco, a sua utilização estaria incorreta.
Variáveis globais
Na variável do tipo global, não precisamos utilizar nenhuma palavra reservada para declarar esse tipo de variável, conforme o exemplo a seguir:
idade = 33;
No exemplo acima, a variável idade seria uma variável global. Diferentemente da local, a global pode ser utilizada em todo o escopo do código, estando em um bloco específico ou não. Ou seja, ela é similar a variável var do JavaScript.
Campos de table
Esse tipo de variável seriam os valores que uma tabela inclui.
tableComida = {nome: "Abacaxi"}
--criação de uma table com o nome "tableComida" com a propriedade nome
print(tableComida.nome)
-- O valor que será exibido na tela será "Abacaxi"
Expressões
Vejamos a seguir algumas expressões existentes nessa linguagem:
Operações Aritméticas
As operações aritméticas são, basicamente, os sinais utilizados nas operações matemáticas, conforme a tabela a seguir:
Sinal | Significado |
+ | adição |
– | subtração |
/ | divisão |
* | multiplicação |
% | módulo (resto da divisão) |
^ | exponenciação (2² → 2^2) |
Operadores Relacionais
Os operadores relacionais são utilizados para estabelecer limites entre valores maiores, menores ou iguais entre si. Vejamos os sinais existentes na tabela a seguir:
Sinal | Significado |
== | igualdade |
~= | diferente que |
< | menor que |
> | maior que |
<= | menor ou igual que |
>= | maior ou igual que |
Quando forem feitas operações utilizando os operadores relacionais, o resultado sempre será: verdadeiro (true) ou falso (false).
Operadores Lógicos
Todos os tipos de operadores consideram a junção de false e nil igual a falso e qualquer coisa diferente disso igual a verdadeiro. Existem três tipos de operadores lógicos em Lua. São eles:
- AND → retorna verdadeiro (true) se ambas as condições forem verdadeiras. Caso uma das condições seja falsa, a operação será falsa.
- OR → retorna verdadeiro (true) se apenas uma das condições da operação forem verdadeiras. Caso todas as condições sejam falsas, a operação será falsa.
- NOT → é a negação do que foi estabelecido na operação. Ou seja, retorna sempre o valor oposto do argumento estabelecido. Então, se a condição for falsa, a negação disso é que ela será verdadeira.
Vejamos um exemplo de operadores lógicos:
k = true
m = false
print(k and m)
E aí, qual resultado deve ser exibido? Falso, não é? O operador AND só retorna verdadeiro se ambas as condições forem verdadeiras.
Concatenação
A concatenação seria o ato de juntar dois números ou caracteres entre si, para formarmos uma palavra, por exemplo. Para utilizarmos a concatenação em Lua, utilizamos dois pontos (..), conforme o exemplo a seguir:
local r = "Linguagem".."Lua"
print(r)
--Resultado: Linguagem Lua
Operador length
O operador length é responsável por verificar quantos caracteres, em bytes, tem uma string. Ele verifica o tamanho de um texto, sendo um caractere igual a um byte. Para utilizarmos o length, aplicamos a cerquilha (#).
Precedência
A precedência seria uma espécie de ordem de importância com que a linguagem Lua trata as operações com os sinais lógicos, aritméticos, relacionais etc. A precedência segue o seguinte padrão:
- Operador OU (or);
- Operador E (and);
- Sequência de operadores: < > <= >= ~= ==;
- Concatenação (..);
- Adição (+);
- Subtração (-);
- Multiplicação (*);
- Divisão (/);
- Módulo (%);
- Operador NÃO (not);
- Tamanho ( length → #);
- Exponenciação (^).
Funções
Se você tem familiaridade com funções em outras linguagens, o funcionamento em Lua é igual ao das demais: há o fornecimento de argumentos que seriam os valores de entrada da função. Por conseguinte, no corpo da função, ela executa uma determinada lógica, podendo ter os resultados retornados.
Vejamos a seguir algumas das maneiras de se declarar funções. Todas as formas estão corretas:
local function nome_funcao ()
-- corpo da função
end
local nome_funcao = function()
-- corpo da função
end
function nome_funcao ()
-- corpo da função
end
nome_funcao = function ()
-- corpo da função
end
Como podemos observar, quando o escopo de uma função é fechado, utilizamos a palavra-chave end. Quando não temos a palavra reservada local em frente das declarações de funções que utilizaremos, essa função seria uma função global no código.
– Entendi! Então, as funções podem ser variáveis?
– Correto.
Se formos mais além, uma tabela pode armazenar muitas funções dentro dela, estendendo o seu uso para diversos casos. Dessa forma, a linguagem Lua apresenta uma flexibilidade muito grande para as operações matemáticas.
Para saber qual é o cosseno de uma medida, por exemplo, você utilizaria:
math.cos(medida_desejada)
Sendo:
- math → table;
- cos → a função propriamente dita.
Métodos
Quando temos os métodos existentes em objetos, conforme visto anteriormente, os objetos em Lua são equivalentes a tabelas. Por exemplo: na biblioteca para fazer operações matemáticas, Math, os objetos guardam os chamados métodos de instância como propriedades internas da biblioteca.
Existe uma diferença pequena na declaração entre métodos e funções: é utilizado o sinal de dois pontos (:) na declaração entre o objeto e seu método correspondente, em vez do sinal de ponto (.) utilizado nas funções.
Regras de Escopo
O escopo da linguagem Lua é denominado escopo léxico. O escopo das variáveis se inicia logo depois de sua declaração no primeiro comando e é finalizado no término do bloco interno que tem uma declaração dessa variável.
Vejamos o exemplo a seguir:
l = 15 -- declaração de variável global
do -- criação de um novo bloco
local l = l -- novo 'l' com valor 15
print(l) --> 10
l = l + 1
do -- criação de outro bloco dentro do já existente
local l = l + 1 -- outro 'l'
print(l) --> 17
end -- fim do bloco interno
print(l) --> 16
end -- fim do bloco externo
print(l) --> 15 (o global)
Em uma declaração de uma variável local (l = l), o novo l declarado não estava presente no escopo naquele momento. Depois disso, o segundo l faz referência à variável declarada externamente.
As variáveis locais podem ser acessadas de forma livre por funções definidas dentro de seu próprio escopo, de acordo com as regras existentes no escopo léxico. As variáveis locais utilizadas por funções internas são denominadas upvalue.
Alocação de memória
A linguagem Lua realiza uma limpeza automática de memória. Periodicamente, a linguagem executa uma coleta de lixo de objetos ou variáveis que não estão sendo mais utilizados, a fim de liberar mais espaço para o desenvolvimento. Com isso, não é necessário fazer o processo de liberação de memória manualmente.
Contudo, há alguns elementos, como variáveis globais e tables, que não são considerados lixo, mesmo que não estejam sendo utilizados em sua aplicação. Caso você deseje descartar esses objetos em uma coleta, basta atribuir o valor nil para aquilo que não deseja mais utilizar.
Conheça a sintaxe da linguagem Lua na prática!
No exemplo a seguir, o código utiliza um laço de repetição while, para exibir os números de 100 a 1, em ordem decrescente:
local contador = 100
while contador >= 1 do
print(contador)
contador = contador - 1
end
Podemos notar que a linguagem Lua dispensa a utilização de ponto e vírgula (;), diferentemente de outras linguagens, como Java e PHP. Além disso, para exibir um conteúdo na tela da pessoa usuária, utilizamos a palavra reservada print. Da mesma forma, para encerrar um bloco de um laço de repetição, utilizamos a palavra end.
Como começar a programar em Lua na prática? Instalando o interpretador!
Para iniciarmos com a linguagem Lua, é necessário realizar o download de um interpretador que entenda a linguagem.
No Linux, é necessário abrir seu terminal. Em distribuições como Debian e Ubuntu, executamos o seguinte comando:
sudo apt-get install lua
Para os demais sistemas operacionais, como Windows e MacOs, você pode baixar o arquivo zipado e instalar no seu equipamento. Feito isso, é necessário descompactar o arquivo baixado (no Linux, podemos executar: tar -vzxf lua-5.3.3.tar.gz).
Feito isso, abriremos o diretório criado (cd lua-5.3.3) e, como usuário root, digitar: make install para fazer a instalação. Feito isso, o interpretador está instalado na máquina. Para utilizá-lo, digite lua codigo.lua.
Caso deseje instalar uma ferramenta complementar para linguagens interpretadas, você pode fazer o download do Geany, por meio também do apt get: sudo apt-get install geany.
A linguagem Lua é muito interessante, não é? É uma linguagem altamente recomendada para quem quer desenvolver jogos e aplicações para mídia digital, como TVs. Também pode ser utilizada para a área de robótica, no planejamento do funcionamento de robôs.
Lua é uma linguagem brasileira de fácil aprendizado, robusta, rápida e leve. Além disso, tem um alto nível de portabilidade, pois um mesmo trecho de código pode rodar em diferentes locais, sem mudanças no script.
Quer aprofundar os seus conhecimentos em linguagens de programação? Confira este artigo sobre a linguagem Fortran e por que ela voltou a ser utilizada atualmente.