Ultimamente diversas empresas internacionais estão oferecendo vaga no Stack Overflow, remota ou presencial, para programadores C++ que possuem conhecimentos da linguagem de programação Lua, além de diversos softwares e Games estão adotando Lua de maneira muito rápida Então, não deixe essas oportunidades escaparem!
Aqui tem tudo para você iniciar nesse mundo da linguagem de programação Lua!
Vamos lá!
Observação: Esse tutorial é indicado para quem conhece basicamente qualquer linguagem de programação.
Lua é uma linguagem de programação interpretada, de script em alto nível, com tipagem dinâmica e multiparadigma, reflexiva e leve, projetada por Tecgraf da PUC-Rio em 1993 para expandir aplicações em geral, de forma extensível (que une partes de um programa feitas em mais de uma linguagem), para prototipagem e para ser embarcada em softwares complexos, como jogos. Assemelha-se com Python, Ruby e Icon, entre outras.
Lua foi criada por um time de desenvolvedores do Tecgraf da PUC-Rio, a princípio, para ser usada em um projeto da Petrobras. Devido à sua eficiência, clareza e facilidade de aprendizado, passou a ser usada em diversos ramos da programação, como no desenvolvimento de jogos (a Blizzard Entertainment, por exemplo, usou a linguagem no jogo World of Warcraft), controle de robôs, processamento de texto, etc. Também é frequentemente usada como uma linguagem de propósito geral.
Lua combina programação procedural com poderosas construções para descrição de dados, baseadas em tabelas associativas e semântica extensível. É tipada dinamicamente, interpretada a partir de bytecodes, e tem gerenciamento automático de memória com coleta de lixo. Essas características fazem de Lua uma linguagem ideal para configuração, automação (scripting) e prototipagem rápida.
E também:
Jogos que também utilizam Lua:
Exemplos de empresas que desenvolveram jogos usando a linguagem Lua: LucasArts, Croteam, BioWare, Microsoft, Relic Entertainment, Absolute Studios, Monkeystone Games, Blizzard, SNKPlaymore, Facepunch Studios, KOG.
Lua foi criada em 1993 por Roberto Ierusalimschy, Luiz Henrique de Figueiredo e Waldemar Celes, membros do Computer Graphics Technology Group na PUC-Rio, a Pontifícia Universidade Católica do Rio de Janeiro, no Brasil.[5] Versões de Lua antes da versão 5.0 foram liberadas sob uma licença similar à licença BSD. A partir da versão 5.0, Lua foi licenciada sob a licença MIT.
Alguns de seus parentes mais próximos são o Icon, por sua concepção, e Python, por sua facilidade de utilização por não programadores. Em um artigo publicado no Dr. Dobb’s Journal, os criadores de Lua também afirmam que Lisp e Scheme foram uma grande influência na decisão de desenvolver a tabela como a principal estrutura de dados de Lua. Lua tem sido usada em várias aplicações, tanto comerciais como não comerciais.
O primeiro projeto utilizando a linguagem em jogos foi em 1997 quando a LucasArts a utilizou como linguagem de script no jogo Grim Fandango.[3]
Em 2008 Nasceu uma das engines mais famosas de Lua (Corona SDK)
Em 2009 nasceu o Love2D, uma engine para jogos 2D.
Lua é normalmente descrita como uma linguagem de múltiplos paradigmas, oferecendo um pequeno conjunto de características gerais que podem ser estendidas para encaixar diferentes tipos de problemas, em vez de fornecer uma especificação mais complexa e rígida para combinar com um único paradigma. Lua, por exemplo, não contém apoio explícito à herança, mas permite que ela seja executada com relativa facilidade com metatables. Do mesmo modo, Lua permite que programadores quando implementam nomes, classes, e outras funções, empreguem poderosas técnicas de programação funcional e completos escopos lexicais.
Lua é uma linguagem que suporta apenas um pequeno número de estruturas, tais como dados atômicos, valores booleanos, números (dupla precisão em ponto flutuante por padrão), e strings. As estruturas de dados comuns, tais como matrizes, conjuntos, tabelas, listas, e registros podem ser representados por meio de Lua. Lua não foi construída com suporte para programação orientada a objeto.
Via: https://pt.wikipedia.org/wiki/Lua_(linguagem_de_programação)
Para instalar Lua basta usar o gerenciador de pacotes da sua distribuição, exemplo:
emerge lua
sudo apt install lua
ou se não funcionar, informe a versão, exemplo: sudo apt install lua51
Você pode escrever em Lua em qualquer IDE, no entanto, o mais recomendado é o Neovim que incluive veremos como criar um plugin para o Neovim utilizando Lua que possui integração nativa.
Após instalar rode: lua --help
a saída será:
Exemplos:
Rodar somente o comando
lua
entra numa subshell, rodeos.exit()
dentro da subshell para sair.
Parâmetro | Uso |
---|---|
-e |
lua -e 'print("Olá, Lua!")' |
-i |
lua -i script.lua |
-v |
lua -v |
Versão |
---|
Lua 5.1.5 Copyright (C) 1994-2012 Lua.org, PUC-Rio |
O mais básico programa.
nvim ola-mundo.lua
E execute: lua ola-mundo.lua
ou:
chmod +x ola-mundo.lua
e execute:./ola-mundo.lua
. Você ainda podia substituir o cabeçalho porwhich lua
e adicionar, exemplo:#!/usr/bin/lua
Outras formas de imprimir:
Sem parenteses
Múltiplas linhas
Ou também com parênteses:
print([[ ]])
Comentários de uma única linha usa-se dois traços(–) pode ser:
Ou em múltiplas linhas
Detalhe: o
--
deve ficar colado do[[
do início.
Existem três tipos de variáveis em Lua: variáveis globais, variáveis locais e campos de tabelas. Assume-se que toda variável é uma variável global a menos que ela seja explicitamente declarada como uma variável local.
Criando uma variável local:
Campos de tabela:
Criando uma tabela vazia e adicionando posteriormente:
Para concatenar strings em Lua precisa-se utilizar duas vezes o ponto: ..
, exemplo:
Saída:
Olá, Mundo!
.
Podemos declarar múltiplas variáveis e imprimir assim:
Lua antes da versão 5.4 não oferecia suporte a constantes automaticamente, mas você pode adicionar uma tabela e tornando a tabela somente leitura usando metatabela(veremos mais à frente isso). Mas a partir da 5.4 use assim:
Rode:
lua5.4 constantes.lua
Se tentar redefinir, exemplo:
Obterá o erro:
lua5.4: sandbox.lua:3: attempt to assign to const variable 'minha_var'
Matrizes são arranjos ordenados de objetos, que podem ser uma matriz unidimensional contendo uma coleção de linhas ou uma matriz multidimensional contendo várias linhas e colunas.
Em Lua, os arrays são implementados usando tabelas de indexação com inteiros. O tamanho de um array não é fixo e pode crescer com base em nossos requisitos, sujeito a restrições de memória.
Em Lua o array/matriz começa do 1, se tentar imprimir o 0(zero) a saída será
nil
Uma matriz unidimensional pode ser representada usando uma estrutura de tabela simples e pode ser inicializada como é mostrado abaixo.
A tipagem dos dados em Lua é dinâmica, mas caso você queira obter o tipo do dado basta, exemplo:
Além desse também existem os tipos: userdata
e thread
.
Lua utiliza quase todos os operadores que outras linguagens de programação utilizam, exemplos:
operador | operador | operador | operador |
---|---|---|---|
+ |
- |
* |
/ |
% |
^ |
== |
~= |
> |
< |
>= |
<= |
and |
or |
not |
# |
Além do
..
que nós já vimos que serve para concatenação.
Exemplos:
Os outros veremos mais à frente!
Assim como as demais linguagens de programção, Lua também dispões de condições, lógico(o recurso mais utilizado em qualquer linguagem de programação).
Note o uso das palavras:
then
eend
Para usar o if
, exemplo:
Para usar o else
Para usar o elseif
Para executarmos uma ação em determinadas vezes utilizamos loops, em Lua há 3 tipos de loops: while
, for
e repeat until
vamos ver como utilizá-los:
Note o uso das palavras reservadas:
do
eend
Loop while
Loop for
Exemplos variados.
Loop repeat until
Utilizando o break
Funções são importantes para reaproveitamento de código, vamos ver algumas formas de usar em Lua.
Função básica:
Passando parâmetros:
Utilizando assinatura:
Função com argumento variável:
Observe o uso da função nativa
ipairs
que é um iterador(veremos mais detalhes posteriormente)
Nesse caso passamos 5 parâmetros para a função.
Imprimindo todos os parâmetros passados com argumento variável:
Para MAIÚSCULA
Perceba que as palavras acentuadas não alteram. Veremos como alterar isso quando falarmos sobre inclusão de bibiliotecas.
Para minúscula
Para o mês com zero:
%02d
.
string.sub(STRING, POS_INI, POS_FINAL)
Ou
Para esse exemplo: 4 vezes
As tabelas são a única estrutura de dados disponível em Lua que nos ajuda a criar diferentes tipos, como arrays e dicionários. Lua usa matrizes associativas e que podem ser indexadas não apenas com números, mas também com strings, exceto nil. As tabelas não têm tamanho fixo e podem crescer de acordo com nossa necessidade.
Lua usa tabelas em todas as representações, incluindo a representação de pacotes. Quando acessamos um método string.format, significa que estamos acessando a função de formatação disponível no pacote string.
As tabelas são chamadas de objetos e não são valores nem variáveis. Lua usa uma expressão construtora {} para criar uma tabela vazia. É preciso saber que não existe uma relação fixa entre uma variável que contém a referência da tabela e a própria tabela.
Leia os comentários no código para um maior entendimento:
Também há as funções: sort
, foreach
, foreachi
e getn
. Saiba mais aqui.
O módulo é como uma biblioteca que pode ser carregada usando require
e tem um único nome global contendo o código a ser utilizado.
Exemplo: Usando uma função que está no arquivo meu_modulo.lua
do programa programa.lua
:
meu_modulo.lua
programa.lua
Outra forma de usar e instanciar o módulo:
meu_modulo.lua
programa.lua
Vamos utilizar a biblioteca nativa os
Saiba mais em: https://www.lua.org/pil/22.1.html
Para isso usa-se a palavra reservada: arg
. Veja os exemplos abaixo:
Uma metatabela é uma tabela que ajuda a modificar o comportamento de uma tabela à qual está anexada com a ajuda de um conjunto de chaves e métodos meta relacionados. Esses metamétodos são funcionalidades Lua poderosas que habilitam recursos como -
__index
na meta-tabela.Existem dois métodos importantes que são usados no tratamento de meta-tabelas, que incluem -
setmetatable (tabela, meta-tabela)
- Este método é usado para definir a meta-tabela para uma tabela.getmetatable (table)
- Este método é usado para obter a meta-tabela de uma tabela.Vejamos primeiro como definir uma tabela como metatabela de outra. É mostrado abaixo.
Ou somente:
__index
Um exemplo simples de metatabela para pesquisar a metatabela quando não está disponível na tabela é mostrado abaixo.
Saída:
valor1 Valordametatabela
Resumindo o código acima:
Se um índice não existir e você deseja adicionar quando for chamado e não existir você pode usar __newindex
e criar um método/função para isso.
Mais informações aqui.
LuaJIT é um Compilador Just-In-Time (JIT) para a linguagem de programação Lua. Seu site oficial é: https://luajit.org/ .
JIT é uma tecnologia que compila um programa em tempo de execução.
A implementação LuaJIT parece superar todas as outras linguagens dinâmicas do JIT (V8, Tracemonkey, PLT Scheme, Erlang HIPE) por um ordem de magnitude .
Para instalar o LuaJIT use o gerenciador de pacotes do seu sistema, exemplos:
Para utilizá-lo, em vez de usar o comando lua
, use luajit
, exemplo:
LuaJIT fornece uma desempenho superior ao interpretador Lua.
Como acontece com todo sistema de alto desempenho, a resposta no final se resume a duas coisas: algoritmos e engenharia. LuaJIT usa técnicas de compilação avançadas e também tem uma implementação de engenharia muito precisa. Por exemplo, quando as sofisticadas técnicas de compilação não conseguem lidar com um trecho de código, LuaJIT recorre a um interpretador muito rápido escrito em assembly x86.
LuaJIT ganha pontos duplos no aspecto de engenharia, porque não apenas LuaJIT em si é bem projetado, mas a própria linguagem Lua tem um design mais simples e mais coerente do que Python e JavaScript. Isso torna (marginalmente) mais fácil para uma implementação fornecer um desempenho consistentemente bom.
LuaRocks é um gerenciador de pacotes para a linguagem de programação Lua, similar aos gerenciadores de pacotes de outras linguagens como: npm(JavaScript), composer(PHP), gem(Ruby), pip(Python) e entre outros.
Seu site oficial é: https://luarocks.org/
Fornece um formato padrão para distribuição de módulos Lua (em um formato independente chamado “rock”), uma ferramenta projetada para gerenciar facilmente a instalação de rocks e um servidor para distribuí-los . Embora não esteja incluído na distribuição Lua, é chamado de “gerenciador de pacotes de fato para módulos Lua contribuídos pela comunidade”.
Para instalá-lo use também o gerenciador de pacotes do seu sistema, exemplos:
Para utilizá-lo use o comando luarocks --help
.
Espero que vocês tenham gostado dessa pequena introdução à essa belíssima Linguagem de Programação que é Lua.
Acompanhe a nossa #hashtag: https://terminalroot.com.br/tags#lua para mais tutoriais e dicas de Lua e também de Neovim que usa Lua como principal fonte de configuração. Futuramente pode ser que iremos expandir esse tutorial, então não esqueça de voltar aqui sempre que possível!