Upload
paulo-henrique
View
127
Download
1
Embed Size (px)
Citation preview
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 1b, c = "bola", 3 -- b recebe o valor "bola" e c o valor 3y -- o valor de y é nilprint (b, y) --> bola nila, b, sobrei = 1, 2print (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
Anda = 10b = 11
if ( a<b and b>= 11)print (“Código rodou sem problemas!”)
end
Retorno: Código rodou sem problemas!
Sintaxe
a = 1 Orb = 2c = 1
If ( a = b or c = a );print (“Código funcionou com sucesso!”)
end
Retorno: Código funcionou com sucesso!
Sintaxe
Nota = 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 FORwhile 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--blocoend
for var in list do--bloco1end
for key,value in ipairs(table) do--bloco2end
for var=init, limit, range do--bloco3 o range e o intervalo--da passagem exe 1..3..5..7end
repeat--blocountil 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_corporeturn 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,"##")endfunction add(num1, num2, functionPrint) result = num1 + num2 functionPrint(result)endmeuprint(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,optionalStartIndex,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 = 10number2 = 20
-- formatação básica --print(string.format(“Isto e%s %s",string1,string2))
-- formatação de data --data = 2; mes = 1; ano = 2016print(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á:nilLuaTutorial
Continuando...
array = {}
for i=1,3 doarray[i] = {}for j=1,3 do
array[i][j] = i*j
endend
for i=1,3 do for j=1,3 do print(array[i][j]) endend
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 Manipuladoresde 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 tableprint(“String Contatenada",table.concat(frutas))
--concatenate with a characterprint(“String Concatenada",table.concat(frutas,", "))
--concatenate fruits based on indexprint(“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/