36
Linguagem Lua

Linguagem lua

Embed Size (px)

Citation preview

Page 1: Linguagem lua

Linguagem Lua

Page 2: 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.

Page 3: Linguagem lua

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

Page 4: Linguagem lua

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.

Page 5: Linguagem lua

Mercado

Desenvolvimento de jogos

Page 6: Linguagem lua

Mercado

Outras aplicações

Page 7: Linguagem lua

Mercado

Quem usa

Page 8: Linguagem lua

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.

Page 9: Linguagem lua

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.

Page 10: Linguagem lua

Paradigmas suportados

Scripting

Funcional

Imperativo

Orientado a Objetos

Page 11: Linguagem lua

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++

Page 12: Linguagem lua

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.

Page 13: Linguagem lua

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.

Page 14: Linguagem lua

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

Page 15: Linguagem lua

Sintaxe

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

Operadores Relacionais Operadores Lógicos• and• or• not

Page 16: Linguagem lua

Anda = 10b = 11

if ( a<b and b>= 11)print (“Código rodou sem problemas!”)

end

Retorno: Código rodou sem problemas!

Sintaxe

Page 17: Linguagem lua

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

Page 18: Linguagem lua

Nota = 1;

if (a not nil)print (“Código rodou com sucesso!”)

end

Retorno: Código rodou com sucesso!

Sintaxe

Page 19: Linguagem lua

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

Page 20: Linguagem lua

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

Page 21: Linguagem lua

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

Page 22: Linguagem lua

Estrutura básica

opcional_função_escopo function nome da função( argumento1, argumento2, argumento3..., argumentoN)

Função_corporeturn parametro_desejado

end

Page 23: Linguagem lua

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)

Page 24: Linguagem lua

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!

Page 25: Linguagem lua

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.

Page 26: Linguagem lua

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)

Page 27: Linguagem lua

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))

Page 28: Linguagem lua

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

Page 29: Linguagem lua

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

Page 30: Linguagem lua

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.

Page 31: Linguagem lua

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á

Page 32: Linguagem lua

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"])

Page 33: Linguagem lua

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))

Page 34: Linguagem lua

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

Page 35: Linguagem lua

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

Page 36: Linguagem lua

Obrigado!

http://www.lua.org/ http://www.tecgraf.puc-rio.br/ http://coronalabs.com/ http://www.telemidia.puc-rio.br/