Escolar Documentos
Profissional Documentos
Cultura Documentos
Lua Linguagem de Programação
Lua Linguagem de Programação
pt.wikipedia.org/wiki/Lua_(linguagem_de_programação)
Artigo
Discussão
Esta página cita fontes, mas que não cobrem todo o conteúdo. Ajude a inserir
referências. Conteúdo não verificável pode ser removido.—Encontre fontes: ABW •
CAPES • Google (N • L • A) (Março de 2013)
Lua
Paradigma Multiparadigma
1/11
Principais Lua
implementações LuaJIT
LuaVela
Luvit
Dialetos: Metalua
Influenciou Dao
Io
Squirrel
Julia
Licença: MIT
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.[4] Assemelha-se com Python, Ruby e Icon, entre
outras.[5]
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.
História
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.[6] Versões de Lua antes da
2/11
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.
Em 2008 nasceu uma das engines mais famosas de Lua (Corona SDK)
Características
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.
A Linguagem
Esta seção descreve o vocabulário, aspectos sintáticos e semânticos de Lua. Em outras
palavras, esta seção descreve quais itens de vocabulário são válidos, como combiná-los
e o que significam. A estrutura da linguagem será explicada usando a notação BNF
estendida usual, onde {a} representa zero ou mais a, e [a] representa um a opcional. Os
não terminais são exibidos como não terminais, as palavras-chave são exibidas como
kword e outros símbolos de terminal são exibidos como "=". A sintaxe Lua completa pode
ser encontrada em §8 no final deste manual.
Convenções Léxicas[7]
3/11
Em Lua, um nome (também chamado de identificador) pode ser qualquer string de letras,
números e sublinhados que não comece com um número. Esta definição é consistente
com a definição de nomes na maioria dos idiomas. (A definição da letra depende do
idioma (local): o idioma atual considera qualquer caractere da letra a ser usado como um
identificador.) Os identificadores são usados para nomear variáveis e campos de tabela.
Lua é uma linguagem que diferencia maiúsculas de minúsculas: and é uma palavra
reservada, mas And e AND são dois nomes válidos diferentes. Por convenção, nomes que
começam com sublinhado e letras maiúsculas (como _VERSION) são reservados para
variáveis globais internas usadas por Lua.
+ - * / % ^ #
( ) { } [ ]
; : , . .. ...
As seguintes cadeias
denotam outros itens léxicos:
Sintaxe e exemplos
O Programa Olá Mundo pode ser escrito da seguinte forma:
print("Olá, Mundo!")
4/11
local function f(t)
return math.sqrt(math.abs(t)) + 5 * t ^ 3
end
local a = {}
for i = 1, 11 do
a[i] = io.read("*number")
end
for i = #a, 1, -1 do
local y = f(a[i])
end
Funções
A função fatorial recursiva:
function fact(n)
if n == 0 then
return 1
else
return n * fact(n - 1)
end
end
function perfeitos(n)
cont=0
x=0
repeat
x=x+1
soma=0
for i=1,(x-1) do
end
end
if soma == x then
print(x)
cont = cont+1
end
until cont==n
end
5/11
do
local oldprint = print -- Grava a variável “print” em “oldprint”
if s == "foo" then
oldprint("bar")
else
oldprint(s)
end
end
end
Qualquer chamada da função “print” agora será executada através da nova função, e
graças ao escopo léxico de Lua, a função “print” antiga só será acessível pelo nova.
return function(y)
return x + y
end
end
plustwo = makeaddfunc(2)
print(plustwo(5)) -- Prints 7
Um novo “closure” é criado para a variável x cada vez que a função “makeaddfunc” é
chamada, de modo que a função anônima a ser retornada sempre irá acessar seu
próprio parâmetro x. O “closure” é gerenciado pelo coletor de lixo (garbage collector) da
linguagem, tal como qualquer outro objeto.
Estruturas de repetição
Lua nos fornece 4 tipos diferentes de loops: while, repeat (similar ao do while de outras
linguagens), for e o loop genérico. Suas respectivas sintaxes são demonstradas abaixo:
while condição do
-- Comandos
end
repeat
-- Comandos
until condição
-- Comandos
-- Exemplo: print(i)
end
-- Comandos
end
Em relação ao laço genérico, ele irá atuar sobre cada par de dados presente na tabela.
Esse tipo de laço é semelhante ao que encontramos em Python.
6/11
A seguir, um exemplo simples de utilização:
local info = { John = 10, Alex = 32 } -- Declaração de uma tabela com pares
chave/valor
end
-- Saída:
-- Name: John
-- Age: 10
-- Name: Alex
-- Age: 32
Tabelas
As tabelas são as estruturas de dados mais importantes (e, por concepção, a única
estrutura de dados complexas) em Lua, e são a base de todos os tipos de dados
possíveis na linguagem. Por meio da utilização de tabelas podemos simular vetores,
matrizes, estruturas, objetos, etc.
a_table = {x = 10} -- Cria uma nova tabela, com uma entrada associada. Onde o
caractere "x" recebe o valor numérico 10.
b_table = a_table
7/11
A seguir, um exemplo de como é possível simular a utilização de um vetor utilizando uma
tabela em Lua:
print(point["x"]) -- Imprime 10
end
array = { Point(10, 20), Point(30, 40), Point(50, 60) } -- Cria array de objetos
"Point"
print(array[2].y) -- Imprime 40
matriz =
{1, 2, 3, 4},
{5, 6, 7, 8}
print(matriz[1][3]) -- Saída: 3
print(matriz[2][4]) -- Saída: 8
Apesar da Lua não possuir os conceitos de orientação a objetos, é possível utilizar esse
paradigma através de dois recursos da linguagem: first-class functions e tabelas. Ao
colocar funções e dados relacionados em uma tabela, criamos um objeto.
A seguir, como exemplo, será criado um objeto vetor, utilizando a sintaxe facilitada que a
linguagem nos oferece para a orientação a objetos:
8/11
local Vetor = { } -- Criação da classe “Vetor”
Vetor.__index = Vetor
end
function Vetor:magnitude()
end
local Vetor = { }
return self
end
end
end
A resposta será a mesma, no entanto, o tempo de execução de cada uma pode ser
diferente.
Metatables
9/11
fibs = { 1, 1 } -- Valores iniciais de fibs[1] e fibs[2].
meta_table = setmetatable(fibs, {
return name[n]
end
})
print (meta_table[3]) -- Saída: 2
Projetos
Jogos
Exemplos de empresas que desenvolveram jogos usando a linguagem Lua: LucasArts,
Croteam, BioWare, Microsoft, Relic Entertainment, Absolute Studios, Monkeystone
Games,[4] Blizzard,[8] SNKPlaymore, Facepunch Studios, KOG.
Referências
1. ↑ Ierusalimschy, Roberto (2009). «Uma Introdução à Programação em Lua» (PDF).
PUC Rio. Consultado em 28 de agosto de 2018
2. ↑ Ir para: a b c d e f g h i Waldemar Celes; Luiz Henrique de Figueiredo, Roberto
Ierusalimschy (2004). «A Linguagem Lua e suas Aplicações em Jogos» (pdf).
Consultado em 15 de Março de 2013
3. ↑ André Rosa (30 de Maio de 2005). «Introdução a LUA, uma poderosa linguagem
de programação». Consultado em 14 de Janeiro de 2016
Bibliografia
Ierusalimschy, Roberto; Figueiredo, Luiz Henrique de; Celes, Waldemar (2006). Lua
5.1 Reference Manual. Rio de Janeiro: Lua.org. 103 páginas. ISBN 85-903798-3-3
Ierusalimschy, Roberto (2006). Programming in Lua. Rio de Janeiro: Lua.org.
252 páginas. ISBN 85-903798-2-5
Jung, Kurt; Brown, Aaron (2007). Beginning Lua Programming. Indianapolis: Wiley
Publishing. 644 páginas. ISBN 978-0-470-06917-2
Linguagens de programação
10/11
Esotéricas · Comparação · História · Turing completude · Programa Olá Mundo ·
Algoritmo TPK · Quine
Ada
Assembly
BASIC
C
C++
C#
COBOL
Dart
Elixir
Erlang
Fortran
Go
Haskell
Java
JavaScript
Julia
Kotlin
Lisp
Lua
ML
Pascal
Perl
PHP
Python
R
Ruby
Rust
Scala
Shell
Smalltalk
SQL
Swift
mais...
Categoria · Lista
11/11