apresentação lua
TRANSCRIPT
![Page 1: Apresentação Lua](https://reader031.vdocuments.mx/reader031/viewer/2022020101/55a66ce61a28abcf458b45ea/html5/thumbnails/1.jpg)
Linguagem de ProgramaçãoLua
![Page 2: Apresentação Lua](https://reader031.vdocuments.mx/reader031/viewer/2022020101/55a66ce61a28abcf458b45ea/html5/thumbnails/2.jpg)
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.
![Page 3: Apresentação Lua](https://reader031.vdocuments.mx/reader031/viewer/2022020101/55a66ce61a28abcf458b45ea/html5/thumbnails/3.jpg)
• Lua e uma linguagem de script dinâmica, semelhante a outras linguagens de script como Python, Ruby e PHP.
O que é Lua ?
![Page 4: Apresentação Lua](https://reader031.vdocuments.mx/reader031/viewer/2022020101/55a66ce61a28abcf458b45ea/html5/thumbnails/4.jpg)
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.
![Page 5: Apresentação Lua](https://reader031.vdocuments.mx/reader031/viewer/2022020101/55a66ce61a28abcf458b45ea/html5/thumbnails/5.jpg)
–Adobe Photoshop Lightroom –Middleware Ginga do Sistema Brasileiro de TV Digital.–Firefox
Outras Aplicações
Mercado
![Page 6: Apresentação Lua](https://reader031.vdocuments.mx/reader031/viewer/2022020101/55a66ce61a28abcf458b45ea/html5/thumbnails/6.jpg)
Quem Usa
![Page 7: Apresentação Lua](https://reader031.vdocuments.mx/reader031/viewer/2022020101/55a66ce61a28abcf458b45ea/html5/thumbnails/7.jpg)
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
![Page 8: Apresentação Lua](https://reader031.vdocuments.mx/reader031/viewer/2022020101/55a66ce61a28abcf458b45ea/html5/thumbnails/8.jpg)
• Declaração de variáveis
• Em Lua, não declaramos o tipo de uma variável.
local var = 10var = “Aula”var = true
Variáveis
![Page 9: Apresentação Lua](https://reader031.vdocuments.mx/reader031/viewer/2022020101/55a66ce61a28abcf458b45ea/html5/thumbnails/9.jpg)
– 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
![Page 10: Apresentação Lua](https://reader031.vdocuments.mx/reader031/viewer/2022020101/55a66ce61a28abcf458b45ea/html5/thumbnails/10.jpg)
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
![Page 11: Apresentação Lua](https://reader031.vdocuments.mx/reader031/viewer/2022020101/55a66ce61a28abcf458b45ea/html5/thumbnails/11.jpg)
• < menor• > maior• <= menor igual• >= maior igual• == igual• ~= diferente
Operadores Relacionais
![Page 12: Apresentação Lua](https://reader031.vdocuments.mx/reader031/viewer/2022020101/55a66ce61a28abcf458b45ea/html5/thumbnails/12.jpg)
• and
• or
• not
Operadores Lógicos
![Page 13: Apresentação Lua](https://reader031.vdocuments.mx/reader031/viewer/2022020101/55a66ce61a28abcf458b45ea/html5/thumbnails/13.jpg)
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
![Page 14: Apresentação Lua](https://reader031.vdocuments.mx/reader031/viewer/2022020101/55a66ce61a28abcf458b45ea/html5/thumbnails/14.jpg)
local i = 0while i < 10 do
print (i )i = i + 1
end
→ 0 1 2 3 4 5 6 7 8 9
Sintaxe While
![Page 15: Apresentação Lua](https://reader031.vdocuments.mx/reader031/viewer/2022020101/55a66ce61a28abcf458b45ea/html5/thumbnails/15.jpg)
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
![Page 16: Apresentação Lua](https://reader031.vdocuments.mx/reader031/viewer/2022020101/55a66ce61a28abcf458b45ea/html5/thumbnails/16.jpg)
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
![Page 17: Apresentação Lua](https://reader031.vdocuments.mx/reader031/viewer/2022020101/55a66ce61a28abcf458b45ea/html5/thumbnails/17.jpg)
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
![Page 18: Apresentação Lua](https://reader031.vdocuments.mx/reader031/viewer/2022020101/55a66ce61a28abcf458b45ea/html5/thumbnails/18.jpg)
• 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
![Page 19: Apresentação Lua](https://reader031.vdocuments.mx/reader031/viewer/2022020101/55a66ce61a28abcf458b45ea/html5/thumbnails/19.jpg)
• 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
![Page 20: Apresentação Lua](https://reader031.vdocuments.mx/reader031/viewer/2022020101/55a66ce61a28abcf458b45ea/html5/thumbnails/20.jpg)
• 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
![Page 21: Apresentação Lua](https://reader031.vdocuments.mx/reader031/viewer/2022020101/55a66ce61a28abcf458b45ea/html5/thumbnails/21.jpg)
• .. 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
![Page 22: Apresentação Lua](https://reader031.vdocuments.mx/reader031/viewer/2022020101/55a66ce61a28abcf458b45ea/html5/thumbnails/22.jpg)
• 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
![Page 23: Apresentação Lua](https://reader031.vdocuments.mx/reader031/viewer/2022020101/55a66ce61a28abcf458b45ea/html5/thumbnails/23.jpg)
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
![Page 24: Apresentação Lua](https://reader031.vdocuments.mx/reader031/viewer/2022020101/55a66ce61a28abcf458b45ea/html5/thumbnails/24.jpg)
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
![Page 25: Apresentação Lua](https://reader031.vdocuments.mx/reader031/viewer/2022020101/55a66ce61a28abcf458b45ea/html5/thumbnails/25.jpg)
• 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
![Page 26: Apresentação Lua](https://reader031.vdocuments.mx/reader031/viewer/2022020101/55a66ce61a28abcf458b45ea/html5/thumbnails/26.jpg)
• 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
![Page 27: Apresentação Lua](https://reader031.vdocuments.mx/reader031/viewer/2022020101/55a66ce61a28abcf458b45ea/html5/thumbnails/27.jpg)
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
![Page 28: Apresentação Lua](https://reader031.vdocuments.mx/reader031/viewer/2022020101/55a66ce61a28abcf458b45ea/html5/thumbnails/28.jpg)
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
![Page 29: Apresentação Lua](https://reader031.vdocuments.mx/reader031/viewer/2022020101/55a66ce61a28abcf458b45ea/html5/thumbnails/29.jpg)
Ferramentas
Frameworks IDE’s
Lua Glider
Eclipse
LuaEdit
QLua Free (Android)
Corona SDK
Cocos2d-x
AAMO
MOAI
![Page 30: Apresentação Lua](https://reader031.vdocuments.mx/reader031/viewer/2022020101/55a66ce61a28abcf458b45ea/html5/thumbnails/30.jpg)
• 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
![Page 31: Apresentação Lua](https://reader031.vdocuments.mx/reader031/viewer/2022020101/55a66ce61a28abcf458b45ea/html5/thumbnails/31.jpg)
• www.lua.org• lua-users.org• LabLua. Lua, Conceitos Basicos e API C (Agosto
de 2008). www.lua.inf.puc-rio.br
Referências