Post on 15-Jul-2015
Linguagem de ProgramaçãoLua
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.
• Lua e uma linguagem de script dinâmica, semelhante a outras linguagens de script como Python, Ruby e PHP.
O que é Lua ?
MercadoDesenvolvimento 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.
–Adobe Photoshop Lightroom –Middleware Ginga do Sistema Brasileiro de TV Digital.–Firefox
Outras Aplicações
Mercado
Quem Usa
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" ) endend
Entrada = 123Saída = numero 123 é impar
Exemplo
• Declaração de variáveis
• Em Lua, não declaramos o tipo de uma variável.
local var = 10var = “Aula”var = true
Variáveis
– 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
local a = 3print (type (a)) → imprime "number“
a = "bola"print (type (a)) → imprime "string“
a = trueprint (type (a)) → imprime "boolean“
a = print -- "a" agora e a função "print"a (type (a)) → imprime "function"
Função Type
• < menor• > maior• <= menor igual• >= maior igual• == igual• ~= diferente
Operadores Relacionais
• and
• or
• not
Operadores Lógicos
Exemplo 1local x = 44if 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 2local a='a'local b=alocal c='c'
if(a == b and a ~= c) thenprint (a..","..b..","..c)
end
→ a,a,c
Sintaxe IF
local i = 0while i < 10 do
print (i )i = i + 1
end
→ 0 1 2 3 4 5 6 7 8 9
Sintaxe While
for var=var1, var2, var3 docorpo_do_laco
end
var1 índice var2 valor da condiçãovar3 contador
for i=1, 10 do print (i) endfor i=10, 1, -1 do print (i) end
Sintaxe For Numérico
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→ a a b b c c d d
Sintaxe For Genérico
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 falsolocal y = b or 1 -- y recebe o valor padrão 1 quando b e um valor falsoreturn 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 sejachamada com um numero menor de parâmetros, o valor dos parâmetros quenão foram fornecidos é nil.
s, p = fun (3, 4) -- a é 3 e b é 4print (s, p) --> 7 12s, p = fun (2) -- a é 2 b é nil e y e inicializado com 1print (s, p) --> 3 2
Funções
• 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 arraysprint (v)
endend
endmaior3 ("bola", "sol", "lua", "balao") -- Imprime "bola" e "balao“
Funções
• 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
• string.subs = "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.lena = "boi"
b = "formiga"
print (#a, #b) --> 3 7
print (string.len (a)) --> 3
print (#string.sub (b, 3)) --> 5
Manipulação de String
• .. a = "seg" .. "unda"
b = "feira"
print (a .. "-" .. b) --> segunda-feira
• string.findlocal s = "Ciência da Computação"
local a = string.find(s,"ê")
print( a ) --> 3
• string.gsublocal s = "boi,bola,balao“
local news = (string.gsub (s, ",", " "))
print (news) --> boi bola balao"
Manipulação de String
• 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
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) --> 4t [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
local t = {}for i=1, 3 do
table.insert (t, i)end
print (t[1]) --> 1print (t[2]) --> 2print (t[3]) --> 3
table.insert (t, 2, 4)--array, posição, valor
print (t[1]) --> 1print (t[2]) --> 4print (t[3]) --> 2print (t[4]) --> 3
table.remove(t) --remove o ultimo elementotable.remove(t, 2) --remove segundo o elemento
Tabelas
• Tabela com Array associativolocal tab2 = {x=100, y=200, z=50}print(tab2[“y”],tab2.z) --> 200 50
• Mais exemplosentry {
name = "Brasil",
capital = "Braslia",
netdomain = "br",
population = 186757608
}
entry {
name = "Argentina",
capital = "Buenos Aires",
netdomain = "ar",
population = 40677348
}
Linguagem de descriçãode Dados
• 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
Classe rectangle
Objeto:Rectangle = {
width = 0,height = 0
}
Método calcula a área:function Rectangle:area (self)
return self.width * self.heightend
Rectangle.width = 6Rectangle.height = 3
local ret1 = Rectangle:area(Rectangle)print (ret1) --> 18
POO em LUA
01 #include <stdio.h>02 #include <string.h>03 #include "lua.h"04 #include "lauxlib.h"05 #include "lualib.h"0607 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 */1213 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 }2122 lua_close (L);23 return 0;24 }
API C Usando Lua em Aplicação C
Ferramentas
Frameworks IDE’s
Lua Glider
Eclipse
LuaEdit
QLua Free (Android)
Corona SDK
Cocos2d-x
AAMO
MOAI
• 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
• www.lua.org• lua-users.org• LabLua. Lua, Conceitos Basicos e API C (Agosto
de 2008). www.lua.inf.puc-rio.br
Referências