31
Linguagem de Programação Lua

Apresentação Lua

Embed Size (px)

Citation preview

Page 1: Apresentação Lua

Linguagem de ProgramaçãoLua

Page 2: Apresentação Lua

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

• 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

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

–Adobe Photoshop Lightroom –Middleware Ginga do Sistema Brasileiro de TV Digital.–Firefox

Outras Aplicações

Mercado

Page 6: Apresentação Lua

Quem Usa

Page 7: Apresentação Lua

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

• 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

– 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

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

• < menor• > maior• <= menor igual• >= maior igual• == igual• ~= diferente

Operadores Relacionais

Page 12: Apresentação Lua

• and

• or

• not

Operadores Lógicos

Page 13: Apresentação Lua

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

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

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

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

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

• 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

• 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

• 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

• .. 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

• 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

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

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

• 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

• 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

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

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

Ferramentas

Frameworks IDE’s

Lua Glider

Eclipse

LuaEdit

QLua Free (Android)

Corona SDK

Cocos2d-x

AAMO

MOAI

Page 30: Apresentação Lua

• 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

• www.lua.org• lua-users.org• LabLua. Lua, Conceitos Basicos e API C (Agosto

de 2008). www.lua.inf.puc-rio.br

Referências