SlideShare uma empresa Scribd logo
1 de 36
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/

Mais conteúdo relacionado

Mais procurados

Algoritmos e Estrutura de Dados - Aula 01
Algoritmos e Estrutura de Dados - Aula 01Algoritmos e Estrutura de Dados - Aula 01
Algoritmos e Estrutura de Dados - Aula 01thomasdacosta
 
Desvendando a linguagem JavaScript
Desvendando a linguagem JavaScriptDesvendando a linguagem JavaScript
Desvendando a linguagem JavaScriptRodrigo Branas
 
Algoritmo e lógica de programação - Aula 1
Algoritmo e lógica de programação - Aula 1Algoritmo e lógica de programação - Aula 1
Algoritmo e lógica de programação - Aula 1engenhariadecomputacao
 
Programação orientada a objetos
Programação orientada a objetosProgramação orientada a objetos
Programação orientada a objetosCleyton Ferrari
 
Estrutura de Dados - Aula 03 - Ponteiros e Funções
Estrutura de Dados - Aula 03 - Ponteiros e FunçõesEstrutura de Dados - Aula 03 - Ponteiros e Funções
Estrutura de Dados - Aula 03 - Ponteiros e FunçõesLeinylson Fontinele
 
Variáveis - Linguagem C
Variáveis - Linguagem CVariáveis - Linguagem C
Variáveis - Linguagem Cprofjr
 
Introdução a Linguagem de Programação C
Introdução a Linguagem de Programação CIntrodução a Linguagem de Programação C
Introdução a Linguagem de Programação CGercélia Ramos
 
Fundamentos de Padrões de Projeto de Software
Fundamentos de Padrões de Projeto de SoftwareFundamentos de Padrões de Projeto de Software
Fundamentos de Padrões de Projeto de SoftwareÁlvaro Farias Pinheiro
 
Desenvolvimento de drivers para sistemas embarcados
Desenvolvimento de drivers para sistemas embarcadosDesenvolvimento de drivers para sistemas embarcados
Desenvolvimento de drivers para sistemas embarcadosRodrigo Almeida
 
Minicurso de JavaScript (Portuguese)
Minicurso de JavaScript (Portuguese)Minicurso de JavaScript (Portuguese)
Minicurso de JavaScript (Portuguese)Bruno Grange
 
Aula 3 introducao a orientação a objetos
Aula 3   introducao a orientação a objetosAula 3   introducao a orientação a objetos
Aula 3 introducao a orientação a objetosRafael Pinheiro
 
[Curso Java Basico - Orientacaoo a Objetos] Aula 24: Classes e atributos
[Curso Java Basico - Orientacaoo a Objetos] Aula 24: Classes e atributos[Curso Java Basico - Orientacaoo a Objetos] Aula 24: Classes e atributos
[Curso Java Basico - Orientacaoo a Objetos] Aula 24: Classes e atributosLoiane Groner
 
Aula 04 - UML e Padrões de Projeto
Aula 04 - UML e Padrões de ProjetoAula 04 - UML e Padrões de Projeto
Aula 04 - UML e Padrões de ProjetoVinícius de Paula
 

Mais procurados (20)

Poo
PooPoo
Poo
 
Algoritmos e Estrutura de Dados - Aula 01
Algoritmos e Estrutura de Dados - Aula 01Algoritmos e Estrutura de Dados - Aula 01
Algoritmos e Estrutura de Dados - Aula 01
 
Desvendando a linguagem JavaScript
Desvendando a linguagem JavaScriptDesvendando a linguagem JavaScript
Desvendando a linguagem JavaScript
 
Algoritmo e lógica de programação - Aula 1
Algoritmo e lógica de programação - Aula 1Algoritmo e lógica de programação - Aula 1
Algoritmo e lógica de programação - Aula 1
 
Programação orientada a objetos
Programação orientada a objetosProgramação orientada a objetos
Programação orientada a objetos
 
Estrutura de Dados - Aula 03 - Ponteiros e Funções
Estrutura de Dados - Aula 03 - Ponteiros e FunçõesEstrutura de Dados - Aula 03 - Ponteiros e Funções
Estrutura de Dados - Aula 03 - Ponteiros e Funções
 
Algoritmos: Variáveis e Constantes
Algoritmos: Variáveis e ConstantesAlgoritmos: Variáveis e Constantes
Algoritmos: Variáveis e Constantes
 
Variáveis - Linguagem C
Variáveis - Linguagem CVariáveis - Linguagem C
Variáveis - Linguagem C
 
Introdução a Linguagem de Programação C
Introdução a Linguagem de Programação CIntrodução a Linguagem de Programação C
Introdução a Linguagem de Programação C
 
Fundamentos de Padrões de Projeto de Software
Fundamentos de Padrões de Projeto de SoftwareFundamentos de Padrões de Projeto de Software
Fundamentos de Padrões de Projeto de Software
 
Desenvolvimento de drivers para sistemas embarcados
Desenvolvimento de drivers para sistemas embarcadosDesenvolvimento de drivers para sistemas embarcados
Desenvolvimento de drivers para sistemas embarcados
 
Paradigmas de programação
Paradigmas de programaçãoParadigmas de programação
Paradigmas de programação
 
Minicurso Linux
Minicurso Linux Minicurso Linux
Minicurso Linux
 
Minicurso de JavaScript (Portuguese)
Minicurso de JavaScript (Portuguese)Minicurso de JavaScript (Portuguese)
Minicurso de JavaScript (Portuguese)
 
Aula 3 introducao a orientação a objetos
Aula 3   introducao a orientação a objetosAula 3   introducao a orientação a objetos
Aula 3 introducao a orientação a objetos
 
[Curso Java Basico - Orientacaoo a Objetos] Aula 24: Classes e atributos
[Curso Java Basico - Orientacaoo a Objetos] Aula 24: Classes e atributos[Curso Java Basico - Orientacaoo a Objetos] Aula 24: Classes e atributos
[Curso Java Basico - Orientacaoo a Objetos] Aula 24: Classes e atributos
 
Modelo E-R
Modelo E-RModelo E-R
Modelo E-R
 
Linguagem C - Ponteiros
Linguagem C - PonteirosLinguagem C - Ponteiros
Linguagem C - Ponteiros
 
Introdução ao Latex
Introdução ao LatexIntrodução ao Latex
Introdução ao Latex
 
Aula 04 - UML e Padrões de Projeto
Aula 04 - UML e Padrões de ProjetoAula 04 - UML e Padrões de Projeto
Aula 04 - UML e Padrões de Projeto
 

Semelhante a Lua linguagem

A Linguagem Lua - Uma abordagem inicial
A Linguagem Lua - Uma abordagem inicialA Linguagem Lua - Uma abordagem inicial
A Linguagem Lua - Uma abordagem inicialFlávio Schuindt
 
5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA
5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA
5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUACândido Sales Gomes
 
Minicurso de Rails - WTISC 2014
Minicurso de Rails - WTISC 2014Minicurso de Rails - WTISC 2014
Minicurso de Rails - WTISC 2014Zarathon Maia
 
Lógica de programação pascal
Lógica de programação   pascalLógica de programação   pascal
Lógica de programação pascalJocelma Rios
 
Introdução a Python - Python Poli
Introdução a Python  - Python PoliIntrodução a Python  - Python Poli
Introdução a Python - Python PoliRodrigo Lira
 
Linguagens de Script: Caso de Estudo Lua
Linguagens de Script: Caso de Estudo LuaLinguagens de Script: Caso de Estudo Lua
Linguagens de Script: Caso de Estudo LuaSérgio Souza Costa
 
Python e django na prática
Python e django na práticaPython e django na prática
Python e django na práticaRafael Cassau
 
Apresentação Ruby no Dojo da UFBA
Apresentação Ruby no Dojo da UFBAApresentação Ruby no Dojo da UFBA
Apresentação Ruby no Dojo da UFBALuciano Borges
 
Linguagem de programação haskell
Linguagem de programação haskellLinguagem de programação haskell
Linguagem de programação haskellDaniel Farias
 
Linguagem de Programação PERL
Linguagem de Programação PERLLinguagem de Programação PERL
Linguagem de Programação PERLTiago R. Sampaio
 
Py sintaxe
Py sintaxePy sintaxe
Py sintaxeFlapenta
 
Computação Científica com SciPy - Brevíssimo Tutorial
Computação Científica com SciPy - Brevíssimo TutorialComputação Científica com SciPy - Brevíssimo Tutorial
Computação Científica com SciPy - Brevíssimo TutorialFabio Spanhol
 

Semelhante a Lua linguagem (20)

A Linguagem Lua - Uma abordagem inicial
A Linguagem Lua - Uma abordagem inicialA Linguagem Lua - Uma abordagem inicial
A Linguagem Lua - Uma abordagem inicial
 
Oz
OzOz
Oz
 
5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA
5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA
5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA
 
Pesquisa ppi 2
Pesquisa ppi 2Pesquisa ppi 2
Pesquisa ppi 2
 
Minicurso de Rails - WTISC 2014
Minicurso de Rails - WTISC 2014Minicurso de Rails - WTISC 2014
Minicurso de Rails - WTISC 2014
 
Lógica de programação pascal
Lógica de programação   pascalLógica de programação   pascal
Lógica de programação pascal
 
Introdução a Python - Python Poli
Introdução a Python  - Python PoliIntrodução a Python  - Python Poli
Introdução a Python - Python Poli
 
Linguagens de Script: Caso de Estudo Lua
Linguagens de Script: Caso de Estudo LuaLinguagens de Script: Caso de Estudo Lua
Linguagens de Script: Caso de Estudo Lua
 
Python e django na prática
Python e django na práticaPython e django na prática
Python e django na prática
 
Apresentação Lua
Apresentação LuaApresentação Lua
Apresentação Lua
 
Python
PythonPython
Python
 
Introdução ao paradigma funcional com scala
Introdução ao paradigma funcional com scalaIntrodução ao paradigma funcional com scala
Introdução ao paradigma funcional com scala
 
Apresentação Ruby no Dojo da UFBA
Apresentação Ruby no Dojo da UFBAApresentação Ruby no Dojo da UFBA
Apresentação Ruby no Dojo da UFBA
 
Linguagem de programação haskell
Linguagem de programação haskellLinguagem de programação haskell
Linguagem de programação haskell
 
Aula4
Aula4Aula4
Aula4
 
Java Básico
Java BásicoJava Básico
Java Básico
 
Linguagem de Programação PERL
Linguagem de Programação PERLLinguagem de Programação PERL
Linguagem de Programação PERL
 
Py sintaxe
Py sintaxePy sintaxe
Py sintaxe
 
Computação Científica com SciPy - Brevíssimo Tutorial
Computação Científica com SciPy - Brevíssimo TutorialComputação Científica com SciPy - Brevíssimo Tutorial
Computação Científica com SciPy - Brevíssimo Tutorial
 
Aula python
Aula pythonAula python
Aula python
 

Lua linguagem

  • 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 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
  • 4. 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.
  • 8. 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.
  • 9. 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.
  • 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 = 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
  • 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 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
  • 20. 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
  • 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 function nome da função( argumento1, argumento2, argumento3..., argumentoN) Função_corpo return parametro_desejado end
  • 23. 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)
  • 24. 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!
  • 25. 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.
  • 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 = {} 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
  • 30. 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.
  • 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(“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"])
  • 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/