Vous êtes sur la page 1sur 6

Na Wikipédia, todos são alunos e professores. Leia, aprenda, edite e ensine.

Lua (linguagem de programação)


Origem: Wikipédia, a enciclopédia livre.
Ir para: navegação, pesquisa
Nota: Para outros significados, veja Lua (desambiguação).
Lua

Paradigma Abstração de dados


Programação imperativa
Programação procedural
Surgido em 1993
Última versão 5.1.4 (22 de agosto de 2008)
Versão em teste 5.2.0-alpha (23 de novembro de
2010)
Criado por Roberto Ierusalimschy,
Luiz Henrique de Figueiredo,
Waldemar Celes
Estilo de Fraca, Dinâmica, Implícita
tipagem:
Compiladores
Dialetos: Metalua
Influenciada por Icon, Pascal, Scheme
Influenciou Dao, Io, Squirrel
Licença: Licença MIT
Página oficial www.lua.org
Lua é uma linguagem de programação interpretada, imperativa, de script, procedural, pequena,
reflexiva e leve, projetada para expandir aplicações em geral, por ser uma linguagem 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 LucasArts, por
exemplo, usou a linguagem no jogo Escape from Monkey Island), controle de robôs, processamento
de texto, etc. Também é freqüentemente 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.

editar] História
Lua foi criada em 1993 por Roberto Ierusalimschy, Luiz Henrique de Figueiredo e Waldemar Celes,
membros da Computer Graphics Technology Group na PUC-Rio, a Pontifícia Universidade Católica
do Rio de Janeiro, no Brasil. Versões da 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 para sua concepção e Python para a sua
facilidade de utilização por não-programadores. Em um artigo publicado no Dr. Dobb's Journal, os
criadores da Lua também afirmam que Lisp e Scheme foram uma grande influência na decisão de
desenvolver o quadro como a principal estrutura de dados de Lua. Lua tem sido usada em várias
aplicações, tanto comerciais como não-comerciais.
[editar] Características
Lua é normalmente descrito 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, o emprego de 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 da Lua. Lua não foi construída com suporte para programação orientada a
objeto.
[editar] Exemplos
O Programa Olá Mundo pode ser escrito da seguinte forma:
print "Olá Mundo!"
A função fatorial recursiva:
function fact(n)
if n == 0 then
return 1
else
return n * fact(n - 1)
end
end
O cálculo dos n primeiros números perfeitos:
function perfeitos(n)
cont=0
x=0
print('Os numeros perfeitos sao ')
repeat
x=x+1
soma=0
for i=1,(x-1) do
if math.mod(x,i)==0 then soma=soma+i;
end
end
if soma == x then
print(x)
cont = cont+1
end
until cont==n
print('Pressione qualquer tecla para finalizar...')
end
O tratamento das funções como variáveis de primeira classe é mostrado no exemplo a seguir, onde o
comportamento da função “print” é modificado:
do
local oldprint = print -- Grava a variável “print” em “oldprint”
print = function(s) -- Redefine a função “print”
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.
Lua também suporta funções closure, como demonstrado abaixo:
function makeaddfunc(x) -- Retorna uma nova função que adiciona x ao argumento
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.
Uma característica essencial de Lua é a semântica Extensível, e o conceito de “metatables” permite
que as tabelas Lua sejam personalizadas em poderosas e exclusivas formas. O exemplo a seguir
mostra uma tabela “infinita”. Para qualquer valor “n”, “fibs [n]” dará o enésimo número Fibonacci
usando programação dinâmica.
fibs = { 1, 1 } -- Valores iniciais de fibs[1] e fibs[2].
setmetatable(fibs, {
__index = function(name, n) -- Função chamada se fibs[n] não existir
name[n] = name[n - 1] + name[n - 2] -- Calcula e grava fibs[n].
return name[n]
end
})

[editar] Tabelas
As tabelas são as estruturas de dados mais importantes (e, por concepção, a única estrutura de
dados complexas) na Lua, e são a base de todos os tipos de usuário criada.
A tabela é um conjunto de chaves e pares de dados (também conhecido como hashed heterogeneous
associative array), onde os dados são referenciados por chave. A chave (índice) pode ser de qualquer
tipo de dados exceto nulo. Um inteiro com chave valor 1 é considerada distinta da chave de uma
string "1".
As tabelas são criadas usando a seguinte sintaxe: {}
a_table = {} -- Creates a new, empty table
Tabelas sempre são passadas por referência:
a_table = {x = 10} -- Creates a new table, with one associated entry. The string x mapping to the number 10.
print(a_table["x"]) -- Prints the value associated with the string key, in this case 10.
b_table = a_table
a_table["x"] = 20 -- The value in the table has been changed to 20.
print(a_table["x"]) -- Prints 20.
print(b_table["x"]) -- Prints 20, because a_table and b_table both refer to the same table.
[editar] Tabelas como estrutura
As tabelas são freqüentemente utilizadas como estruturas (ou objetos), utilizando strings como
chaves, porque este tipo de uso é muito comum, e a Lua apresenta uma sintaxe especial para
acessar esses tipos de domínios. Exemplo:
point = { x = 10, y = 20 } -- Create new table
print(point["x"]) -- Prints 10
print(point.x) -- Has exactly the same meaning as line above
[editar] Tabela como matriz
Através da utilização de uma tecla numérica, a tabela lembra um tipo de dados de matriz. São de
base 1, o primeiro índice é 1 em vez de 0 como é para muitas linguagens de programação. Exemplo
de strings de uma simples matriz:
array = { "a", "b", "c", "d" } -- Indices are assigned automatically.
print(array[2]) -- Prints "b". Automatic indexing in Lua starts at 1.
print(#array) -- Prints 4. # is the length operator for tables and strings.
array[0] = "z" -- Zero is a legal index.
print(#array) -- Still prints 4, as Lua arrays are 1-based.
Exemplo de um vetor de objetos:
function Point(x, y) -- "Point" object constructor
return { x = x, y = y } -- Creates and returns a new object (table)
end
array = { Point(10, 20), Point(30, 40), Point(50, 60) } -- Creates array of points
print(array[2].y) -- Prints 40

[editar] Projetos que utilizam Lua


• Adobe Photoshop Lightroom
• Angry Birds
• Celestia
• Civilization V
• ClanLib
• Damn Small Linux
• Escape from Monkey Island
• Fable II
• Far Cry
• Freeciv
• Freelancer (jogo eletrônico)
• Grim Fandango
• Impossible Creatures
• Kepler (software)
• Lego Universe
• lighttpd
• MDK2
• Monopoly Tycoon
• Monotone
• Nmap
• PlayStation Home
• Ragnarok Online
• Roblox
• World of Warcraft
[editar] Bibliografia
• Ierusalimschy, Roberto; Figueiredo, Luiz Henrique de; Celes, Waldemar. Lua Reference
manual. Rio de Janeiro: Lua.org, 2006. 103 p. ISBN 85-903798-3-3
• Ierusalimschy, Roberto. Programming in Lua. Rio de Janeiro: Lua.org, 2006. 252 p. ISBN 85-
903798-2-5
• Jung, Kurt; Brown, Aaron. Beginning Lua Programming. Indianapolis: Wiley Publishing,
2007. 644 p. ISBN 0-470-06917-2
[editar] Ver também
• Linguagem de programação
• Linguagem de script
• Lista de linguagens de programação
[editar] Ligações externas
• Página oficial (em inglês)
• Página oficial (em português)
• Manual de Referência de Lua 5.1 (em português)
• Demonstração online (em inglês)
• Lua Wiki (em inglês) - Wiki oficial
• Luaforge - Hospedagem e catálogo de projetos que usam Lua (em inglês)
• Tecgraf - Tecnologia em Computação Gráfica (em português)
• Página pessoal de Roberto Ierusalimschy (em português)

[Esconder]
v•e

Principais linguagens de programação


ALGOL • APL • Assembly • AWK • B • BASIC • BCPL • COBOL •
Linguagens históricas (2GL, 3GL)
CPL • Forth • Fortran • Lisp • Logo • Simula • Smalltalk

Gödel • Haskell • Icon • Lisp • Logo • Lua • Pascal • Prolog • Scala •


Linguagens acadêmicas
Scheme • Scratch • Simula • Smalltalk • Tcl

ABAP • ActionScript • AWK • COBOL • Delphi • MATLAB • PL/SQL •


Linguagens proprietárias
RPG • Scratch • Transact-SQL • Visual Basic

Ada • Assembly • C • C++ • C♯ • Icon • Lisp • Logo • Object Pascal •


Linguagens não-proprietárias
Objective-C • Pascal • Scheme • Simula • Smalltalk

Boo • Clojure • D • Erlang • Go • Harbour • Haskell • Java •


Linguagens livres
JavaScript • Lua • Perl • PHP • Python • Ruby • Scala • Tcl

Befunge • brainfuck • FALSE • INTERCAL • LOLCODE • Malbolge •


Linguagens esotéricas
PATH • Pbrain • SNUSP • Unlambda • Whitespace

Lista de linguagens de programação • Comparação entre linguagens de programação • Programa Olá


Mundo • Pr

Vous aimerez peut-être aussi