Lua é uma linguagem de script dinâmica criada em 1993 no Brasil para ser usada inicialmente em projetos da Petrobras. Desde então, Lua tem sido amplamente utilizada no desenvolvimento de jogos, aplicativos móveis e sistemas embarcados por ser leve, rápida e ter uma curva de aprendizado fácil. O documento descreve a história, aplicações, características e sintaxe básica da linguagem Lua.
2. História
• Criada em 1993
• Tecgraf, PUC-Rio
• Criadores
- Roberto Ierusalimschy
- Waldemar Celes
- Luiz Henrique de Figueiredo
- Tecgraf, um laboratório de pesquisa e desenvolvimento da PUC-Rio.
- A princípio, para ser usada em um projeto da Petrobras.
3. • Lua e uma linguagem de script dinâmica,
semelhante a outras linguagens de script
como Python, Ruby e PHP.
O que é Lua ?
4. Mercado
Desenvolvimento de Jogos
● Abrangência: em 2012 bateu o número de
1 bilhão de downloads.
Lua é utilizada em conjunto com
Objective-C nas aplicações específicas de
iOS.
● Abrangência: chegou a possuir mais de 12
bilhões de jogadores ativos.
Lua é utilizado em modificações de UI.
7. io.write("Informe o numero:n")
local numero = io.read()
function verifica (n)
if n % 2 == 0 then
return print( "numero "..n.." é par" )
else
return print( "numero "..n.." é impar" )
end
end
Entrada = 123
Saída = numero 123 é impar
Exemplo
8. • Declaração de variáveis
• Em Lua, não declaramos o tipo de uma
variável.
local var = 10
var = “Aula”
var = true
Variáveis
9. – nil
• Null
– boolean
• True ou False
– number
• Lua possui somente um tipo numérico básico, Number, que é ponto flutuante por
padrão.
– string
• podem ser delimitadas por aspas duplas ou simples
– function
• Em Lua, funções são valores de primeira classe
– userdata
• Usado para armazenar dados do C em variáveis Lua.
– thread
• fluxos de execução independentes. Da suporte ao uso de co-rotinas (multitarefa)
– table
• Tabela em Lua.
Tipos de Variáveis
10. local a = 3
print (type (a)) → imprime "number“
a = "bola"
print (type (a)) → imprime "string“
a = true
print (type (a)) → imprime "boolean“
a = print -- "a" agora e a função "print"
a (type (a)) → imprime "function"
Função Type
11. • < menor
• > maior
• <= menor igual
• >= maior igual
• == igual
• ~= diferente
Operadores Relacionais
13. Exemplo 1
local x = 44
if x > 30 then
print ("maior que 30")
elseif x > 20 then
print ("maior que 20")
elseif x > 10 then
print ("maior que 10")
else
print ("que x pequeno")
end
→ maior que 30
Exemplo 2
local a='a'
local b=a
local c='c'
if(a == b and a ~= c) then
print (a..","..b..","..c)
end
→ a,a,c
Sintaxe IF
14. local i = 0
while i < 10 do
print (i )
i = i + 1
end
→ 0 1 2 3 4 5 6 7 8 9
Sintaxe While
15. for var=var1, var2, var3 do
corpo_do_laco
end
var1 índice
var2 valor da condição
var3 contador
for i=1, 10 do print (i) end
for i=10, 1, -1 do print (i) end
Sintaxe For Numérico
16. ipairs, para percorrer os índices de um array;
pairs, para percorrer as chaves de uma tabela;
local a = {"a","b","c","d"}
for i, v in ipairs (a) do
print (v)
end
→ a,b,c,d
local t = {a="a",b="b",c="c",d="d"}
for k, v in pairs (t) do -- k guarda a chave, v o valor
print (k, v)
end
→ aa
b b
c c
d d
Sintaxe For Genérico
17. function nomedafuncao (arg_1, arg_2, ..., arg_n)
corpoDaFuncão
end
function fun (a, b)
local x = a or 1 -- x recebe o valor padrão 1 quando a e um valor falso
local y = b or 1 -- y recebe o valor padrão 1 quando b e um valor falso
return x + y, x * y
end
Embora a função fun possua dois parâmetros, e possível chama-la com um numero diferente de
parâmetros, os valores extra são descartados, caso a função seja
chamada com um numero menor de parâmetros, o valor dos parâmetros que
não foram fornecidos é nil.
s, p = fun (3, 4) -- a é 3 e b é 4
print (s, p) --> 7 12
s, p = fun (2) -- a é 2 b é nil e y e inicializado com 1
print (s, p) --> 3 2
Funções
18. • Número variavel de parametros
– Funções com um numero variável de parâmetros podem ser declaradas usando três pontos
(...). Para acessar então os parâmetros que foram chamados, usamos a notação {...}
function maior3 (...)
for i, v in ipairs {...} do -- percorre a lista de parâmetros
if #v > 3 then -- # e o operador de tamanho para cadeias e arrays
print (v)
end
end
end
maior3 ("bola", "sol", "lua", "balao") -- Imprime "bola" e "balao“
Funções
19. • Em Lua, cadeias de caracteres são imutáveis,
isto é, toda vez que tentamos alterar uma
cadeia de caracteres, não estamos realmente
modicando a cadeia original, mas sim criando
uma nova cadeia.
• Em Lua o primeiro caractere da cadeia esta no
índice 1.
Manipulação de String
20. • string.sub
s = "bolada"
string.sub(array, inicio, [fim])
print (string.sub (s, 1, 3)) --> bol
print (string.sub (s, 1)) --> bolada
print (string.sub (s, 5, 6)) --> da
print (string.sub (s, -4)) --> lada
• String.len
a = "boi"
b = "formiga"
print (#a, #b) --> 3 7
Manipulação de String
21. • ..
a = "seg" .. "unda"
b = "feira"
print (a .. "-" .. b) --> segunda-feira
• string.find
local s = "Ciência da Computação"
local a = string.find(s,"ê")
print( a ) --> 3
• string.gsub
local s = "boi,bola,balao“
Manipulação de String
22. • Tabelas são o único mecanismo de
estruturação de dados em Lua. Tabelas
implementam diretamente arrays associativos
e arrays numéricos, e podem ser usadas para
implementar diversas outras estruturas de
dados, como conjuntos e grafos.
• Alem disso, tabelas são usadas para
representar registros, objetos e módulos Lua.
Tabelas
23. local tab ={4, “lua”, false}
tab[1] --> 4
Tamanho da tabela #
local t = {"a", "b", "c"}
print (#t) --> 3
table.insert (t, "d")
print (#t) --> 4
t [6] = "8“
--[[ Temos um valor nil no meio do array (t[5]). O operador de tamanho não
tem um comportamento bem definido neste caso]]
Tabelas
24. local t = {}
for i=1, 3 do
table.insert (t, i)
end
print (t[1]) --> 1
print (t[2]) --> 2
print (t[3]) --> 3
table.insert (t, 2, 4)--array, posição, valor
print (t[1]) --> 1
print (t[2]) --> 4
print (t[3]) --> 2
print (t[4]) --> 3
table.remove(t) --remove o ultimo elemento
table.remove(t, 2) --remove segundo o elemento
Tabelas
25. • Tabela com Array associativo
local tab2 = {x=100, y=200, z=50}
print(tab2[“y”],tab2.z) --> 200 50
• Mais exemplos
entry {
name = "Brasil",
capital = "Braslia",
netdomain = "br",
population = 186757608
}
entry {
name = "Argentina",
capital = "Buenos Aires",
netdomain = "ar",
population = 40677348
Linguagem de descrição
de Dados
26. • Lua não e uma linguagem orientada a objetos,
mas provê mecanismos que tornam possível a
programação orientada a objetos (POO) (há,
inclusive, mais de uma maneira de programar
orientado a objetos em Lua).
POO em Lua
27. Classe rectangle
Objeto:
Rectangle = {
width = 0,
height = 0
}
Método calcula a área:
function Rectangle:area (self)
return self.width * self.height
end
Rectangle.width = 6
Rectangle.height = 3
local ret1 = Rectangle:area(Rectangle)
print (ret1) --> 18
POO em LUA
28. 01 #include <stdio.h>
02 #include <string.h>
03 #include "lua.h"
04 #include "lauxlib.h"
05 #include "lualib.h"
06
07 int main () {
08 char buff [256];
09 int error;
10 lua_State *L = luaL_newstate (); /* cria um novo estado Lua */
11 luaL_openlibs (L); /* da acesso a todas as bibliotecas padr~oes */
12
13 while (fgets (buff, sizeof (buff), stdin) != NULL) {
14 error = luaL_loadbuffer (L, buff, strlen (buff), "line") ||
15 lua_pcall (L, 0, 0, 0);
16 if (error) {
17 fprintf (stderr, "%s", lua_tostring (L, -1));
18 lua_pop (L, 1); /* retira a mensagem de erro da pilha */
19 }
20 }
21
22 lua_close (L);
23 return 0;
24 }
API C
Usando Lua em Aplicação C
30. • Para um arquivo com 100K, Lua o trata em 1.2
seg, Perl em 5.3 seg, e Python em 16.8 seg.
• O núcleo da linguagem somado as suas
bibliotecas padrões ocupa menos de 200k.
• Presente em mais de 80 países
• Única linguagem de programação
desenvolvida fora do primeiro mundo a ter
aceitação mundial
Curiosidades