Slide completo sobre a Linguagem de Programação Lua.
Conteúdo:
- Definição.
- Mercado.
- Quem a utiliza.
- Características.
- Sintaxe da Linguagem.
- Códigos de Exemplos.
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
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.
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