Linguagem Lua
O que é Lua ?
• Lua e uma linguagem de script dinâmica,
semelhante a outras linguagens de script
como Python, Ruby e PHP.
• É uma linguagem Brasileira. Única
linguagem desenvolvida fora do eixo
EUA/Europa/Japão a ser adotada
mundialmente.
História
• Criada em 1993
- A princípio, para ser usada em um projeto da Petrobras.
• Tecgraf, PUC-Rio
- Um laboratório de pesquisa e desenvolvimento da PUC-Rio.
• Criadores
- Roberto Ierusalimschy
- Waldemar Celes
- Luiz Henrique de Figueiredo
História
• Lua participou da HOPL III, em 2007.
• 3ª Conferencia sobre História das Linguagens de
Programação que acontece a cada 15 anos (1978,
1993 e 2007), poucas linguagens são escolhidas e
isso foi um importante reconhecimento do impacto
mundial da linguagem Lua.
Mercado
Desenvolvimento de jogos
Mercado
Outras aplicações
Mercado
Quem usa
Características
• Estabelecida e robusta
- Lua é usada em muitas aplicações Industriais, com ênfase em sistemas
embutidos e Jogos.
- Linguagem de script mais usada em jogos.
- Sólido manual de referencia e muitos livros sobre a linguagem.
• Rápida
- Ótimo Desempenho.
- Porções substanciais de aplicações grandes são escritas em Lua.
• Portátil
- Lua é distribuída via pequeno pacote e compila sem modificações em
todas as plataformas que tem um compilador C padrão.
Características
• Poderosa (e simples)
- Meta-Mecanismos para a implementação de construções.
• Pequena
- Incluir Lua em aplicações não aumenta quase em nada seu tamanho.
• Livre
- Software livre de código aberto.
• Tem importância Global
- HOPL III, a 3a Conferência da ACM sobre a História das Linguagens de
Programação – 2007.
Paradigmas suportados
Scripting
Funcional
Imperativo
Orientado a Objetos
Dinamismo do Lua
 Programar em Lua não é muito diferente de programar em
outras linguagens, porém um aspecto importante dela, que à
aproxima de outras linguagens semelhantes, como o Ruby, é
o fato dela ser trabalhada dinamicamente, ou seja, a execução
de trechos do código ao mesmo tempo do ambiente do
programa, como por exemplo o loadstring, semelhante ao
eval em Pearl.
 Tipagem dinâmica forte garante que o Lua não permitirá uma
operação de tipo incorreto, tal como o Java, e diferente do
C/C++
Sintaxe
Tipos de variáveis
• Tipo nil.
- Valor indefinido, todas as variáveis não inicializadas assumem esse valor.
• Tipo boolean.
- Representa os valores true ou false.
• Tipo number.
- Representa os valores numéricos.
• Tipo string.
- Cadeia de caracteres.
- São Imutáveis.
Sintaxe
• Tipo Function.
- Tipo que representa Funções.
- Em lua, Funções são valores de primeira classe.
• Tipo userdata.
- Usado para armazenar dados C em variáveis em Lua.
• Tipo thread.
- Representa fluxos de execuções independentes, usados para implementar
co-rotinas.
• Tipo Table.
- Único mecanismo de estruturação de dados em Lua.
- Pode representar Arrays, símbolos, conjuntos, grafos, registros, etc.
Sintaxe
• Em Lua, não declaramos o tipo de uma variável.
x = 1 -- x recebe 1
b, c = "bola", 3 -- b recebe o valor "bola" e c o valor 3
y -- o valor de y é nil
print (b, y) --> bola nil
a, b, sobrei = 1, 2
print (a, b, sobrei) --> 1 2 nil
Variáveis
Sintaxe
• < menor
• > maior
• <= menor igual
• >= maior igual
• == igual
• ~= diferente
Operadores Relacionais Operadores Lógicos
• and
• or
• not
And
a = 10
b = 11
if ( a<b and b>= 11)
print (“Código rodou sem problemas!”)
end
Retorno: Código rodou sem problemas!
Sintaxe
a = 1 Or
b = 2
c = 1
If ( a = b or c = a );
print (“Código funcionou com sucesso!”)
end
Retorno: Código funcionou com sucesso!
Sintaxe
Not
a = 1;
if (a not nil)
print (“Código rodou com sucesso!”)
end
Retorno: Código rodou com sucesso!
Sintaxe
If/Else
if expr then
bloco
end
if exp then
bloco1...
else
bloco2...
end
if expr1 then
bloco1
elseif expr2 then
bloco2
...
elseif expr N then
bloco N
else
bloco N+1
end
Estruturas de repetição
WHILE FOR
while expr do
bloco
end
f = 1
--valor do fatorial
i = n
--controle do laço
while i > 0 do
f = f * i
i = i – 1
end
for var=init, limit do
--bloco
end
for var in list do
--bloco1
end
for key,value in ipairs(table) do
--bloco2
end
for var=init, limit, range do
--bloco3 o range e o intervalo
--da passagem exe 1..3..5..7
end
repeat
--bloco
until exp
REPEAT
f = 1
--valor do fatorial
i = 1
--controle do laço
repeat
f = f * i
i = i + 1
until i > n
Funções em Lua
• Em Lua, funções não são
declaradas estaticamente, mas
criadas durante a execução do
programa em si. Ele também
não exige que o número de
valores seja igual ao número de
variáveis, se houver mais
valores, os extras serão
descartados; na falta de
variáveis, variáveis extras serão
criadas com valor nil.
 Lua também retorna MAIS de um valor, como no
exemplo a seguir:
function foo (x) return x, x+1 end
print(foo(3)) --> 3 4
 A função realiza, e retorna duas respostas para as
duas expressões á serem realizadas pela função;
outro método é utilizando a atribuição múltipla:
a, b = foo(10)s
 Neste caso, a receberá o primeiro valor retornado, e
b receberá o segundo. Em geral, em qualquer
situação que Lua aceita uma lista de expressões
(Passagem de Parâmetros, Construção de Listas,
dentre outros), a atribuição múltipla também será
permitida
Estrutura básica
opcional_função_escopo function nome da função( argumento1,
argumento2, argumento3..., argumentoN)
Função_corpo
return parametro_desejado
end
Exemplos práticos
Função simples
function max(num1, num2)
if (num1 > num2) then
result = num1;
else
result = num2;
end
return result;
End
-- chamando a função:
print(“O maior é ", max(10,4))
Atribuindo a função, e a
passando como parâmetro de
outra função
meuprint = function(param)
print(“Teste print- ##",param,"##")
end
function add(num1, num2, functionPrint)
result = num1 + num2
functionPrint(result)
end
meuprint(10)
add(2, 5, meuprint)
Strings
 string.upper(string)
• Retorna todo o texto maíusculo
 string.lower(string)
• Retorna todo o texto minúsculo
 string.gsub(mainString,PalavraX,PalavraY)
• Retorna uma string, com menções de PalavraX
substituidas por Palavra Y
 string.strfind(mainString,Test,optionalStartInd
ex,optionalEndIndex)
• Retorna o Index de começo e o Index de fim de
Teste, e nil se não existir na string
 string.reverse(string)
• Aditrevni gnirts a anroteR
Lua também possui
operadores de
manipulação de
Strings!
Continuação
 string.format(...)
• Retorna a string formatada
 string.char(arg) and string.byte(arg)
• Retorna a identificação númerica, ou
caracterizada da string na memória.
 string.len(arg)
• Retorna o tamanho da string
 string.rep(string, n))
• Retorna a string, repetindo-a o número
de vezes.
Exemplos
string1 = "Lua";
print(string.upper(string1))
print(string.lower(string1))
string2 = "Lua Tutorial"
novastring =
string.gsub(string2,"Tutorial","Língua")
print(“A nova string é",novastring)
string3 = "Lua é simples"
print(string.find(string3,“simples"))
reversedString = string.reverse(string3)
print(reversedString)
Exemplos
Formatando Strings
string1 = "Lua"
string2 = "Tutorial"
number1 = 10
number2 = 20
-- formatação básica --
print(string.format(“Isto e%s %s",string1,string2))
-- formatação de data --
data = 2; mes = 1; ano = 2016
print(string.format(“Hoje é %02d/%02d/%03d",
data, mes, ano))
-- Formatacao decimal --
print(string.format("%.4f",1/3))
Arrays
 Na Lua , os arrays são
implementados usando
tabelas de indexação com
inteiros . O tamanho de uma
matriz não é fixo e pode
crescer com base nos nossos
requisitos , sujeitos a
restrições de memória .
array = {"Lua", "Tutorial"}
for i= 0, 2 do
print(array[i])
end
Retornará:
nil
Lua
Tutorial
Continuando...
array = {}
for i=1,3 do
array[i] = {}
for j=1,3 do
array[i][j] = i*j
end
end
for i=1,3 do
for j=1,3 do
print(array[i][j])
end
end
Tabelas
 As tabelas são a única estrutura de dados disponíveis na Lua que nos
ajuda a criar diferentes tipos, como arrays e dicionários . Lua usa matrizes
associativas e que pode ser indexado com não apenas números , mas
também com cordas , exceto nil . Tabelas não têm tamanho fixo e pode
crescer com base em nossa necessidade . Lua usa tabelas em todas as
representações , incluindo a representação de pacotes . Quando acessar
um string.format método , ou seja, estamos acessando a função de
formatação disponíveis no pacote string!
mytable = {}
mytable[1] = "Lua“
 Nil é o elemento removedor de valores em tabela.
Elementos Manipuladores
de Tabela
 table.concat (tabela [, sep [, i [, j]]])
• Concatena as strings da tabela de acordo com parâmetros dados.
 table.insert (tabela, [pos,] value)
• Insere um valor na tabela na posição específica
 table.maxn (tabela)
• Retorna o maior index numérico
 table.remove (tabela [, pos])
• Remove o valor da tabela na posição específica
 table.sort (tabela [, comp])
• Organiza a tabela de acordo com o algoritmo criado para organiza-lá
Exemplo!
minhatabela = {}
print(“O tipo de minha tabela e ",type(minhatabela))
minhatabela[1]= "Lua"
minhatabela["wow"] = "Tutorial"
print("minhatabela Elemento em index 1 e ", mytable[1])
print("minhatabela Elemento em index wow e ", mytable["wow"])
Concatenação
frutas = {"banana",“laranja",“pera"}
-- returns concatenated string of table
print(“String Contatenada",table.concat(frutas))
--concatenate with a character
print(“String Concatenada",table.concat(frutas,", "))
--concatenate fruits based on index
print(“String Concatenada com Index",table.concat(frutas,", ", 2,3))
Inserindo
na Tabela
frutas = {"banana",“laranja",“maca"}
-- inserir uma fruta no fim --
table.insert(frutas,"manga”)
print(“A ultima fruta e ",fruits[4])
--Inserir fruta no Index 2 --
table.insert(frutas,2,“uvas")
print("Fruta em index 2 e ",frutas[2])
print(“O numero máximo de elementos na tabela e
",table.maxn(frutas))
print(“A ultima fruta e ",fruits[5])
table.remove(fruits)
print(“Agora é apenas ",fruits[5])
-- Retornara nil --
Organizando em índices
frutas = {"banana",“laranja",“maca",“uvas"}
for k,v in ipairs(frutas) do
print(k,v)
end
table.sort(frutas)
print(“Agora a versão organizada ")
for k,v in ipairs(frutas) do
print(k,v)
end
Obrigado!
 http://www.lua.org/
 http://www.tecgraf.puc-rio.br/
 http://coronalabs.com/
 http://www.telemidia.puc-rio.br/

Linguagem lua

  • 1.
  • 2.
    O que éLua ? • Lua e uma linguagem de script dinâmica, semelhante a outras linguagens de script como Python, Ruby e PHP. • É uma linguagem Brasileira. Única linguagem desenvolvida fora do eixo EUA/Europa/Japão a ser adotada mundialmente.
  • 3.
    História • Criada em1993 - A princípio, para ser usada em um projeto da Petrobras. • Tecgraf, PUC-Rio - Um laboratório de pesquisa e desenvolvimento da PUC-Rio. • Criadores - Roberto Ierusalimschy - Waldemar Celes - Luiz Henrique de Figueiredo
  • 4.
    História • Lua participouda HOPL III, em 2007. • 3ª Conferencia sobre História das Linguagens de Programação que acontece a cada 15 anos (1978, 1993 e 2007), poucas linguagens são escolhidas e isso foi um importante reconhecimento do impacto mundial da linguagem Lua.
  • 5.
  • 6.
  • 7.
  • 8.
    Características • Estabelecida erobusta - Lua é usada em muitas aplicações Industriais, com ênfase em sistemas embutidos e Jogos. - Linguagem de script mais usada em jogos. - Sólido manual de referencia e muitos livros sobre a linguagem. • Rápida - Ótimo Desempenho. - Porções substanciais de aplicações grandes são escritas em Lua. • Portátil - Lua é distribuída via pequeno pacote e compila sem modificações em todas as plataformas que tem um compilador C padrão.
  • 9.
    Características • Poderosa (esimples) - Meta-Mecanismos para a implementação de construções. • Pequena - Incluir Lua em aplicações não aumenta quase em nada seu tamanho. • Livre - Software livre de código aberto. • Tem importância Global - HOPL III, a 3a Conferência da ACM sobre a História das Linguagens de Programação – 2007.
  • 10.
  • 11.
    Dinamismo do Lua Programar em Lua não é muito diferente de programar em outras linguagens, porém um aspecto importante dela, que à aproxima de outras linguagens semelhantes, como o Ruby, é o fato dela ser trabalhada dinamicamente, ou seja, a execução de trechos do código ao mesmo tempo do ambiente do programa, como por exemplo o loadstring, semelhante ao eval em Pearl.  Tipagem dinâmica forte garante que o Lua não permitirá uma operação de tipo incorreto, tal como o Java, e diferente do C/C++
  • 12.
    Sintaxe Tipos de variáveis •Tipo nil. - Valor indefinido, todas as variáveis não inicializadas assumem esse valor. • Tipo boolean. - Representa os valores true ou false. • Tipo number. - Representa os valores numéricos. • Tipo string. - Cadeia de caracteres. - São Imutáveis.
  • 13.
    Sintaxe • Tipo Function. -Tipo que representa Funções. - Em lua, Funções são valores de primeira classe. • Tipo userdata. - Usado para armazenar dados C em variáveis em Lua. • Tipo thread. - Representa fluxos de execuções independentes, usados para implementar co-rotinas. • Tipo Table. - Único mecanismo de estruturação de dados em Lua. - Pode representar Arrays, símbolos, conjuntos, grafos, registros, etc.
  • 14.
    Sintaxe • Em Lua,não declaramos o tipo de uma variável. x = 1 -- x recebe 1 b, c = "bola", 3 -- b recebe o valor "bola" e c o valor 3 y -- o valor de y é nil print (b, y) --> bola nil a, b, sobrei = 1, 2 print (a, b, sobrei) --> 1 2 nil Variáveis
  • 15.
    Sintaxe • < menor •> maior • <= menor igual • >= maior igual • == igual • ~= diferente Operadores Relacionais Operadores Lógicos • and • or • not
  • 16.
    And a = 10 b= 11 if ( a<b and b>= 11) print (“Código rodou sem problemas!”) end Retorno: Código rodou sem problemas! Sintaxe
  • 17.
    a = 1Or b = 2 c = 1 If ( a = b or c = a ); print (“Código funcionou com sucesso!”) end Retorno: Código funcionou com sucesso! Sintaxe
  • 18.
    Not a = 1; if(a not nil) print (“Código rodou com sucesso!”) end Retorno: Código rodou com sucesso! Sintaxe
  • 19.
    If/Else if expr then bloco end ifexp then bloco1... else bloco2... end if expr1 then bloco1 elseif expr2 then bloco2 ... elseif expr N then bloco N else bloco N+1 end
  • 20.
    Estruturas de repetição WHILEFOR while expr do bloco end f = 1 --valor do fatorial i = n --controle do laço while i > 0 do f = f * i i = i – 1 end for var=init, limit do --bloco end for var in list do --bloco1 end for key,value in ipairs(table) do --bloco2 end for var=init, limit, range do --bloco3 o range e o intervalo --da passagem exe 1..3..5..7 end repeat --bloco until exp REPEAT f = 1 --valor do fatorial i = 1 --controle do laço repeat f = f * i i = i + 1 until i > n
  • 21.
    Funções em Lua •Em Lua, funções não são declaradas estaticamente, mas criadas durante a execução do programa em si. Ele também não exige que o número de valores seja igual ao número de variáveis, se houver mais valores, os extras serão descartados; na falta de variáveis, variáveis extras serão criadas com valor nil.  Lua também retorna MAIS de um valor, como no exemplo a seguir: function foo (x) return x, x+1 end print(foo(3)) --> 3 4  A função realiza, e retorna duas respostas para as duas expressões á serem realizadas pela função; outro método é utilizando a atribuição múltipla: a, b = foo(10)s  Neste caso, a receberá o primeiro valor retornado, e b receberá o segundo. Em geral, em qualquer situação que Lua aceita uma lista de expressões (Passagem de Parâmetros, Construção de Listas, dentre outros), a atribuição múltipla também será permitida
  • 22.
    Estrutura básica opcional_função_escopo functionnome da função( argumento1, argumento2, argumento3..., argumentoN) Função_corpo return parametro_desejado end
  • 23.
    Exemplos práticos Função simples functionmax(num1, num2) if (num1 > num2) then result = num1; else result = num2; end return result; End -- chamando a função: print(“O maior é ", max(10,4)) Atribuindo a função, e a passando como parâmetro de outra função meuprint = function(param) print(“Teste print- ##",param,"##") end function add(num1, num2, functionPrint) result = num1 + num2 functionPrint(result) end meuprint(10) add(2, 5, meuprint)
  • 24.
    Strings  string.upper(string) • Retornatodo o texto maíusculo  string.lower(string) • Retorna todo o texto minúsculo  string.gsub(mainString,PalavraX,PalavraY) • Retorna uma string, com menções de PalavraX substituidas por Palavra Y  string.strfind(mainString,Test,optionalStartInd ex,optionalEndIndex) • Retorna o Index de começo e o Index de fim de Teste, e nil se não existir na string  string.reverse(string) • Aditrevni gnirts a anroteR Lua também possui operadores de manipulação de Strings!
  • 25.
    Continuação  string.format(...) • Retornaa string formatada  string.char(arg) and string.byte(arg) • Retorna a identificação númerica, ou caracterizada da string na memória.  string.len(arg) • Retorna o tamanho da string  string.rep(string, n)) • Retorna a string, repetindo-a o número de vezes.
  • 26.
    Exemplos string1 = "Lua"; print(string.upper(string1)) print(string.lower(string1)) string2= "Lua Tutorial" novastring = string.gsub(string2,"Tutorial","Língua") print(“A nova string é",novastring) string3 = "Lua é simples" print(string.find(string3,“simples")) reversedString = string.reverse(string3) print(reversedString)
  • 27.
    Exemplos Formatando Strings string1 ="Lua" string2 = "Tutorial" number1 = 10 number2 = 20 -- formatação básica -- print(string.format(“Isto e%s %s",string1,string2)) -- formatação de data -- data = 2; mes = 1; ano = 2016 print(string.format(“Hoje é %02d/%02d/%03d", data, mes, ano)) -- Formatacao decimal -- print(string.format("%.4f",1/3))
  • 28.
    Arrays  Na Lua, os arrays são implementados usando tabelas de indexação com inteiros . O tamanho de uma matriz não é fixo e pode crescer com base nos nossos requisitos , sujeitos a restrições de memória . array = {"Lua", "Tutorial"} for i= 0, 2 do print(array[i]) end Retornará: nil Lua Tutorial
  • 29.
    Continuando... array = {} fori=1,3 do array[i] = {} for j=1,3 do array[i][j] = i*j end end for i=1,3 do for j=1,3 do print(array[i][j]) end end
  • 30.
    Tabelas  As tabelassão a única estrutura de dados disponíveis na Lua que nos ajuda a criar diferentes tipos, como arrays e dicionários . Lua usa matrizes associativas e que pode ser indexado com não apenas números , mas também com cordas , exceto nil . Tabelas não têm tamanho fixo e pode crescer com base em nossa necessidade . Lua usa tabelas em todas as representações , incluindo a representação de pacotes . Quando acessar um string.format método , ou seja, estamos acessando a função de formatação disponíveis no pacote string! mytable = {} mytable[1] = "Lua“  Nil é o elemento removedor de valores em tabela.
  • 31.
    Elementos Manipuladores de Tabela table.concat (tabela [, sep [, i [, j]]]) • Concatena as strings da tabela de acordo com parâmetros dados.  table.insert (tabela, [pos,] value) • Insere um valor na tabela na posição específica  table.maxn (tabela) • Retorna o maior index numérico  table.remove (tabela [, pos]) • Remove o valor da tabela na posição específica  table.sort (tabela [, comp]) • Organiza a tabela de acordo com o algoritmo criado para organiza-lá
  • 32.
    Exemplo! minhatabela = {} print(“Otipo de minha tabela e ",type(minhatabela)) minhatabela[1]= "Lua" minhatabela["wow"] = "Tutorial" print("minhatabela Elemento em index 1 e ", mytable[1]) print("minhatabela Elemento em index wow e ", mytable["wow"])
  • 33.
    Concatenação frutas = {"banana",“laranja",“pera"} --returns concatenated string of table print(“String Contatenada",table.concat(frutas)) --concatenate with a character print(“String Concatenada",table.concat(frutas,", ")) --concatenate fruits based on index print(“String Concatenada com Index",table.concat(frutas,", ", 2,3))
  • 34.
    Inserindo na Tabela frutas ={"banana",“laranja",“maca"} -- inserir uma fruta no fim -- table.insert(frutas,"manga”) print(“A ultima fruta e ",fruits[4]) --Inserir fruta no Index 2 -- table.insert(frutas,2,“uvas") print("Fruta em index 2 e ",frutas[2]) print(“O numero máximo de elementos na tabela e ",table.maxn(frutas)) print(“A ultima fruta e ",fruits[5]) table.remove(fruits) print(“Agora é apenas ",fruits[5]) -- Retornara nil --
  • 35.
    Organizando em índices frutas= {"banana",“laranja",“maca",“uvas"} for k,v in ipairs(frutas) do print(k,v) end table.sort(frutas) print(“Agora a versão organizada ") for k,v in ipairs(frutas) do print(k,v) end
  • 36.
    Obrigado!  http://www.lua.org/  http://www.tecgraf.puc-rio.br/ http://coronalabs.com/  http://www.telemidia.puc-rio.br/