SlideShare ist ein Scribd-Unternehmen logo
1 von 31
Downloaden Sie, um offline zu lesen
Linguagem de Programação
Lua
História
• Criada em 1993
• Tecgraf, PUC-Rio
• Criadores
- Roberto Ierusalimschy
- Waldemar Celes
- Luiz Henrique de Figueiredo
- Tecgraf, um laboratório de pesquisa e desenvolvimento da PUC-Rio.
- A princípio, para ser usada em um projeto da Petrobras.
• Lua e uma linguagem de script dinâmica,
semelhante a outras linguagens de script
como Python, Ruby e PHP.
O que é Lua ?
Mercado
Desenvolvimento de Jogos
● Abrangência: em 2012 bateu o número de
1 bilhão de downloads.
Lua é utilizada em conjunto com
Objective-C nas aplicações específicas de
iOS.
● Abrangência: chegou a possuir mais de 12
bilhões de jogadores ativos.
Lua é utilizado em modificações de UI.
–Adobe Photoshop Lightroom
–Middleware Ginga do Sistema Brasileiro de TV Digital.
–Firefox
Outras Aplicações
Mercado
Quem Usa
io.write("Informe o numero:n")
local numero = io.read()
function verifica (n)
if n % 2 == 0 then
return print( "numero "..n.." é par" )
else
return print( "numero "..n.." é impar" )
end
end
Entrada = 123
Saída = numero 123 é impar
Exemplo
• Declaração de variáveis
• Em Lua, não declaramos o tipo de uma
variável.
local var = 10
var = “Aula”
var = true
Variáveis
– nil
• Null
– boolean
• True ou False
– number
• Lua possui somente um tipo numérico básico, Number, que é ponto flutuante por
padrão.
– string
• podem ser delimitadas por aspas duplas ou simples
– function
• Em Lua, funções são valores de primeira classe
– userdata
• Usado para armazenar dados do C em variáveis Lua.
– thread
• fluxos de execução independentes. Da suporte ao uso de co-rotinas (multitarefa)
– table
• Tabela em Lua.
Tipos de Variáveis
local a = 3
print (type (a)) → imprime "number“
a = "bola"
print (type (a)) → imprime "string“
a = true
print (type (a)) → imprime "boolean“
a = print -- "a" agora e a função "print"
a (type (a)) → imprime "function"
Função Type
• < menor
• > maior
• <= menor igual
• >= maior igual
• == igual
• ~= diferente
Operadores Relacionais
• and
• or
• not
Operadores Lógicos
Exemplo 1
local x = 44
if x > 30 then
print ("maior que 30")
elseif x > 20 then
print ("maior que 20")
elseif x > 10 then
print ("maior que 10")
else
print ("que x pequeno")
end
→ maior que 30
Exemplo 2
local a='a'
local b=a
local c='c'
if(a == b and a ~= c) then
print (a..","..b..","..c)
end
→ a,a,c
Sintaxe IF
local i = 0
while i < 10 do
print (i )
i = i + 1
end
→ 0 1 2 3 4 5 6 7 8 9
Sintaxe While
for var=var1, var2, var3 do
corpo_do_laco
end
var1 índice
var2 valor da condição
var3 contador
for i=1, 10 do print (i) end
for i=10, 1, -1 do print (i) end
Sintaxe For Numérico
ipairs, para percorrer os índices de um array;
pairs, para percorrer as chaves de uma tabela;
local a = {"a","b","c","d"}
for i, v in ipairs (a) do
print (v)
end
→ a,b,c,d
local t = {a="a",b="b",c="c",d="d"}
for k, v in pairs (t) do -- k guarda a chave, v o valor
print (k, v)
end
→ aa
b b
c c
d d
Sintaxe For Genérico
function nomedafuncao (arg_1, arg_2, ..., arg_n)
corpoDaFuncão
end
function fun (a, b)
local x = a or 1 -- x recebe o valor padrão 1 quando a e um valor falso
local y = b or 1 -- y recebe o valor padrão 1 quando b e um valor falso
return x + y, x * y
end
Embora a função fun possua dois parâmetros, e possível chama-la com um numero diferente de
parâmetros, os valores extra são descartados, caso a função seja
chamada com um numero menor de parâmetros, o valor dos parâmetros que
não foram fornecidos é nil.
s, p = fun (3, 4) -- a é 3 e b é 4
print (s, p) --> 7 12
s, p = fun (2) -- a é 2 b é nil e y e inicializado com 1
print (s, p) --> 3 2
Funções
• Número variavel de parametros
– Funções com um numero variável de parâmetros podem ser declaradas usando três pontos
(...). Para acessar então os parâmetros que foram chamados, usamos a notação {...}
function maior3 (...)
for i, v in ipairs {...} do -- percorre a lista de parâmetros
if #v > 3 then -- # e o operador de tamanho para cadeias e arrays
print (v)
end
end
end
maior3 ("bola", "sol", "lua", "balao") -- Imprime "bola" e "balao“
Funções
• Em Lua, cadeias de caracteres são imutáveis,
isto é, toda vez que tentamos alterar uma
cadeia de caracteres, não estamos realmente
modicando a cadeia original, mas sim criando
uma nova cadeia.
• Em Lua o primeiro caractere da cadeia esta no
índice 1.
Manipulação de String
• string.sub
s = "bolada"
string.sub(array, inicio, [fim])
print (string.sub (s, 1, 3)) --> bol
print (string.sub (s, 1)) --> bolada
print (string.sub (s, 5, 6)) --> da
print (string.sub (s, -4)) --> lada
• String.len
a = "boi"
b = "formiga"
print (#a, #b) --> 3 7
Manipulação de String
• ..
a = "seg" .. "unda"
b = "feira"
print (a .. "-" .. b) --> segunda-feira
• string.find
local s = "Ciência da Computação"
local a = string.find(s,"ê")
print( a ) --> 3
• string.gsub
local s = "boi,bola,balao“
Manipulação de String
• Tabelas são o único mecanismo de
estruturação de dados em Lua. Tabelas
implementam diretamente arrays associativos
e arrays numéricos, e podem ser usadas para
implementar diversas outras estruturas de
dados, como conjuntos e grafos.
• Alem disso, tabelas são usadas para
representar registros, objetos e módulos Lua.
Tabelas
local tab ={4, “lua”, false}
tab[1] --> 4
Tamanho da tabela #
local t = {"a", "b", "c"}
print (#t) --> 3
table.insert (t, "d")
print (#t) --> 4
t [6] = "8“
--[[ Temos um valor nil no meio do array (t[5]). O operador de tamanho não
tem um comportamento bem definido neste caso]]
Tabelas
local t = {}
for i=1, 3 do
table.insert (t, i)
end
print (t[1]) --> 1
print (t[2]) --> 2
print (t[3]) --> 3
table.insert (t, 2, 4)--array, posição, valor
print (t[1]) --> 1
print (t[2]) --> 4
print (t[3]) --> 2
print (t[4]) --> 3
table.remove(t) --remove o ultimo elemento
table.remove(t, 2) --remove segundo o elemento
Tabelas
• Tabela com Array associativo
local tab2 = {x=100, y=200, z=50}
print(tab2[“y”],tab2.z) --> 200 50
• Mais exemplos
entry {
name = "Brasil",
capital = "Braslia",
netdomain = "br",
population = 186757608
}
entry {
name = "Argentina",
capital = "Buenos Aires",
netdomain = "ar",
population = 40677348
Linguagem de descrição
de Dados
• Lua não e uma linguagem orientada a objetos,
mas provê mecanismos que tornam possível a
programação orientada a objetos (POO) (há,
inclusive, mais de uma maneira de programar
orientado a objetos em Lua).
POO em Lua
Classe rectangle
Objeto:
Rectangle = {
width = 0,
height = 0
}
Método calcula a área:
function Rectangle:area (self)
return self.width * self.height
end
Rectangle.width = 6
Rectangle.height = 3
local ret1 = Rectangle:area(Rectangle)
print (ret1) --> 18
POO em LUA
01 #include <stdio.h>
02 #include <string.h>
03 #include "lua.h"
04 #include "lauxlib.h"
05 #include "lualib.h"
06
07 int main () {
08 char buff [256];
09 int error;
10 lua_State *L = luaL_newstate (); /* cria um novo estado Lua */
11 luaL_openlibs (L); /* da acesso a todas as bibliotecas padr~oes */
12
13 while (fgets (buff, sizeof (buff), stdin) != NULL) {
14 error = luaL_loadbuffer (L, buff, strlen (buff), "line") ||
15 lua_pcall (L, 0, 0, 0);
16 if (error) {
17 fprintf (stderr, "%s", lua_tostring (L, -1));
18 lua_pop (L, 1); /* retira a mensagem de erro da pilha */
19 }
20 }
21
22 lua_close (L);
23 return 0;
24 }
API C
Usando Lua em Aplicação C
Ferramentas
Frameworks IDE’s
Lua Glider
Eclipse
LuaEdit
QLua Free (Android)
Corona SDK
Cocos2d-x
AAMO
MOAI
• Para um arquivo com 100K, Lua o trata em 1.2
seg, Perl em 5.3 seg, e Python em 16.8 seg.
• O núcleo da linguagem somado as suas
bibliotecas padrões ocupa menos de 200k.
• Presente em mais de 80 países
• Única linguagem de programação
desenvolvida fora do primeiro mundo a ter
aceitação mundial
Curiosidades
• www.lua.org
• lua-users.org
• LabLua. Lua, Conceitos Basicos e API C (Agosto
de 2008). www.lua.inf.puc-rio.br
Referências

Weitere ähnliche Inhalte

Was ist angesagt?

Aprendendo a programar - Programação Procedural vs OOP
Aprendendo a programar - Programação Procedural vs OOPAprendendo a programar - Programação Procedural vs OOP
Aprendendo a programar - Programação Procedural vs OOPLeonardo Bastos
 
5-1-sistem-operasi-linux.ppt
5-1-sistem-operasi-linux.ppt5-1-sistem-operasi-linux.ppt
5-1-sistem-operasi-linux.pptrevoGF
 
Capítulo 10 Sistemas Operacionais Modernos
Capítulo 10 Sistemas Operacionais ModernosCapítulo 10 Sistemas Operacionais Modernos
Capítulo 10 Sistemas Operacionais ModernosWellington Oliveira
 
difference between c c++ c#
difference between c c++ c#difference between c c++ c#
difference between c c++ c#Sireesh K
 
Python Programming language
Python Programming languagePython Programming language
Python Programming languageHadeelAlbedah
 
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
 
Hear no evil, see no evil, patch no evil: Or, how to monkey-patch safely.
Hear no evil, see no evil, patch no evil: Or, how to monkey-patch safely.Hear no evil, see no evil, patch no evil: Or, how to monkey-patch safely.
Hear no evil, see no evil, patch no evil: Or, how to monkey-patch safely.Graham Dumpleton
 
Psi-mod-15
Psi-mod-15Psi-mod-15
Psi-mod-15diogoa21
 
Introduction to c language | History of C language
Introduction to c language | History of C languageIntroduction to c language | History of C language
Introduction to c language | History of C languagesimplidigital
 
Lógica de Programação - Estrutura condicional
Lógica de Programação - Estrutura condicionalLógica de Programação - Estrutura condicional
Lógica de Programação - Estrutura condicionalWesley R. Bezerra
 
Conan.io - The C/C++ package manager for Developers
Conan.io - The C/C++ package manager for DevelopersConan.io - The C/C++ package manager for Developers
Conan.io - The C/C++ package manager for DevelopersUilian Ries
 
Unix Linux Commands Presentation 2013
Unix Linux Commands Presentation 2013Unix Linux Commands Presentation 2013
Unix Linux Commands Presentation 2013Wave Digitech
 

Was ist angesagt? (20)

C vs c++
C vs c++C vs c++
C vs c++
 
GCC compiler
GCC compilerGCC compiler
GCC compiler
 
Aprendendo a programar - Programação Procedural vs OOP
Aprendendo a programar - Programação Procedural vs OOPAprendendo a programar - Programação Procedural vs OOP
Aprendendo a programar - Programação Procedural vs OOP
 
5-1-sistem-operasi-linux.ppt
5-1-sistem-operasi-linux.ppt5-1-sistem-operasi-linux.ppt
5-1-sistem-operasi-linux.ppt
 
C# language
C# languageC# language
C# language
 
Capítulo 10 Sistemas Operacionais Modernos
Capítulo 10 Sistemas Operacionais ModernosCapítulo 10 Sistemas Operacionais Modernos
Capítulo 10 Sistemas Operacionais Modernos
 
difference between c c++ c#
difference between c c++ c#difference between c c++ c#
difference between c c++ c#
 
Linguagem lua
Linguagem luaLinguagem lua
Linguagem lua
 
Python Programming language
Python Programming languagePython Programming language
Python Programming language
 
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
 
C pdf
C pdfC pdf
C pdf
 
Hear no evil, see no evil, patch no evil: Or, how to monkey-patch safely.
Hear no evil, see no evil, patch no evil: Or, how to monkey-patch safely.Hear no evil, see no evil, patch no evil: Or, how to monkey-patch safely.
Hear no evil, see no evil, patch no evil: Or, how to monkey-patch safely.
 
Psi-mod-15
Psi-mod-15Psi-mod-15
Psi-mod-15
 
G++ & GCC
G++ & GCCG++ & GCC
G++ & GCC
 
Introduction to c language | History of C language
Introduction to c language | History of C languageIntroduction to c language | History of C language
Introduction to c language | History of C language
 
Lógica de Programação - Estrutura condicional
Lógica de Programação - Estrutura condicionalLógica de Programação - Estrutura condicional
Lógica de Programação - Estrutura condicional
 
Conan.io - The C/C++ package manager for Developers
Conan.io - The C/C++ package manager for DevelopersConan.io - The C/C++ package manager for Developers
Conan.io - The C/C++ package manager for Developers
 
Introduction to c#
Introduction to c#Introduction to c#
Introduction to c#
 
clean code
clean codeclean code
clean code
 
Unix Linux Commands Presentation 2013
Unix Linux Commands Presentation 2013Unix Linux Commands Presentation 2013
Unix Linux Commands Presentation 2013
 

Ähnlich wie Linguagem de Programação Lua: Uma introdução concisa à linguagem dinâmica e leve

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
 
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop Python
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop PythonIEEEweek 2017 @ DETI Univ. Aveiro - Workshop Python
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop PythonDiogo Gomes
 
Palestra python
Palestra pythonPalestra python
Palestra pythonRony Cruch
 
Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)Luciano Ramalho
 
Ruby - Criando código para máquinas e humanos
Ruby - Criando código para máquinas e humanosRuby - Criando código para máquinas e humanos
Ruby - Criando código para máquinas e humanosGregorio Kusowski
 
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
 
Introdução à Programação em Python
Introdução à Programação em PythonIntrodução à Programação em Python
Introdução à Programação em PythonRodrigo Hübner
 
Aula5 introducao c
Aula5 introducao cAula5 introducao c
Aula5 introducao cprofwtelles
 
Python Funcional
Python FuncionalPython Funcional
Python Funcionalpugpe
 
Introdução a JavaScript
Introdução a JavaScriptIntrodução a JavaScript
Introdução a JavaScriptBruno Catão
 
Usando numba onde python é lento
Usando numba onde python é lentoUsando numba onde python é lento
Usando numba onde python é lentoEdison Muenz
 
mod3-programação-estruturada
mod3-programação-estruturadamod3-programação-estruturada
mod3-programação-estruturadadiogoa21
 

Ähnlich wie Linguagem de Programação Lua: Uma introdução concisa à linguagem dinâmica e leve (20)

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
 
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop Python
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop PythonIEEEweek 2017 @ DETI Univ. Aveiro - Workshop Python
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop Python
 
Palestra python
Palestra pythonPalestra python
Palestra python
 
Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)
 
Ed1
Ed1Ed1
Ed1
 
Ruby - Criando código para máquinas e humanos
Ruby - Criando código para máquinas e humanosRuby - Criando código para máquinas e humanos
Ruby - Criando código para máquinas e humanos
 
Python
PythonPython
Python
 
Apostila rpira
Apostila rpiraApostila rpira
Apostila rpira
 
A Linguagem Lua - Uma abordagem inicial
A Linguagem Lua - Uma abordagem inicialA Linguagem Lua - Uma abordagem inicial
A Linguagem Lua - Uma abordagem inicial
 
Python Emsl2009
Python Emsl2009Python Emsl2009
Python Emsl2009
 
Introdução à Programação em Python
Introdução à Programação em PythonIntrodução à Programação em Python
Introdução à Programação em Python
 
Aula5 introducao c
Aula5 introducao cAula5 introducao c
Aula5 introducao c
 
Aula5 introducao c
Aula5 introducao cAula5 introducao c
Aula5 introducao c
 
Python
PythonPython
Python
 
Pythonfuncional
PythonfuncionalPythonfuncional
Pythonfuncional
 
Python Funcional
Python FuncionalPython Funcional
Python Funcional
 
Introdução a JavaScript
Introdução a JavaScriptIntrodução a JavaScript
Introdução a JavaScript
 
Usando numba onde python é lento
Usando numba onde python é lentoUsando numba onde python é lento
Usando numba onde python é lento
 
Python 02
Python 02Python 02
Python 02
 
mod3-programação-estruturada
mod3-programação-estruturadamod3-programação-estruturada
mod3-programação-estruturada
 

Linguagem de Programação Lua: Uma introdução concisa à linguagem dinâmica e leve

  • 2. História • Criada em 1993 • Tecgraf, PUC-Rio • Criadores - Roberto Ierusalimschy - Waldemar Celes - Luiz Henrique de Figueiredo - Tecgraf, um laboratório de pesquisa e desenvolvimento da PUC-Rio. - A princípio, para ser usada em um projeto da Petrobras.
  • 3. • Lua e uma linguagem de script dinâmica, semelhante a outras linguagens de script como Python, Ruby e PHP. O que é Lua ?
  • 4. Mercado Desenvolvimento de Jogos ● Abrangência: em 2012 bateu o número de 1 bilhão de downloads. Lua é utilizada em conjunto com Objective-C nas aplicações específicas de iOS. ● Abrangência: chegou a possuir mais de 12 bilhões de jogadores ativos. Lua é utilizado em modificações de UI.
  • 5. –Adobe Photoshop Lightroom –Middleware Ginga do Sistema Brasileiro de TV Digital. –Firefox Outras Aplicações Mercado
  • 7. io.write("Informe o numero:n") local numero = io.read() function verifica (n) if n % 2 == 0 then return print( "numero "..n.." é par" ) else return print( "numero "..n.." é impar" ) end end Entrada = 123 Saída = numero 123 é impar Exemplo
  • 8. • Declaração de variáveis • Em Lua, não declaramos o tipo de uma variável. local var = 10 var = “Aula” var = true Variáveis
  • 9. – nil • Null – boolean • True ou False – number • Lua possui somente um tipo numérico básico, Number, que é ponto flutuante por padrão. – string • podem ser delimitadas por aspas duplas ou simples – function • Em Lua, funções são valores de primeira classe – userdata • Usado para armazenar dados do C em variáveis Lua. – thread • fluxos de execução independentes. Da suporte ao uso de co-rotinas (multitarefa) – table • Tabela em Lua. Tipos de Variáveis
  • 10. local a = 3 print (type (a)) → imprime "number“ a = "bola" print (type (a)) → imprime "string“ a = true print (type (a)) → imprime "boolean“ a = print -- "a" agora e a função "print" a (type (a)) → imprime "function" Função Type
  • 11. • < menor • > maior • <= menor igual • >= maior igual • == igual • ~= diferente Operadores Relacionais
  • 12. • and • or • not Operadores Lógicos
  • 13. Exemplo 1 local x = 44 if x > 30 then print ("maior que 30") elseif x > 20 then print ("maior que 20") elseif x > 10 then print ("maior que 10") else print ("que x pequeno") end → maior que 30 Exemplo 2 local a='a' local b=a local c='c' if(a == b and a ~= c) then print (a..","..b..","..c) end → a,a,c Sintaxe IF
  • 14. local i = 0 while i < 10 do print (i ) i = i + 1 end → 0 1 2 3 4 5 6 7 8 9 Sintaxe While
  • 15. for var=var1, var2, var3 do corpo_do_laco end var1 índice var2 valor da condição var3 contador for i=1, 10 do print (i) end for i=10, 1, -1 do print (i) end Sintaxe For Numérico
  • 16. ipairs, para percorrer os índices de um array; pairs, para percorrer as chaves de uma tabela; local a = {"a","b","c","d"} for i, v in ipairs (a) do print (v) end → a,b,c,d local t = {a="a",b="b",c="c",d="d"} for k, v in pairs (t) do -- k guarda a chave, v o valor print (k, v) end → aa b b c c d d Sintaxe For Genérico
  • 17. function nomedafuncao (arg_1, arg_2, ..., arg_n) corpoDaFuncão end function fun (a, b) local x = a or 1 -- x recebe o valor padrão 1 quando a e um valor falso local y = b or 1 -- y recebe o valor padrão 1 quando b e um valor falso return x + y, x * y end Embora a função fun possua dois parâmetros, e possível chama-la com um numero diferente de parâmetros, os valores extra são descartados, caso a função seja chamada com um numero menor de parâmetros, o valor dos parâmetros que não foram fornecidos é nil. s, p = fun (3, 4) -- a é 3 e b é 4 print (s, p) --> 7 12 s, p = fun (2) -- a é 2 b é nil e y e inicializado com 1 print (s, p) --> 3 2 Funções
  • 18. • Número variavel de parametros – Funções com um numero variável de parâmetros podem ser declaradas usando três pontos (...). Para acessar então os parâmetros que foram chamados, usamos a notação {...} function maior3 (...) for i, v in ipairs {...} do -- percorre a lista de parâmetros if #v > 3 then -- # e o operador de tamanho para cadeias e arrays print (v) end end end maior3 ("bola", "sol", "lua", "balao") -- Imprime "bola" e "balao“ Funções
  • 19. • Em Lua, cadeias de caracteres são imutáveis, isto é, toda vez que tentamos alterar uma cadeia de caracteres, não estamos realmente modicando a cadeia original, mas sim criando uma nova cadeia. • Em Lua o primeiro caractere da cadeia esta no índice 1. Manipulação de String
  • 20. • string.sub s = "bolada" string.sub(array, inicio, [fim]) print (string.sub (s, 1, 3)) --> bol print (string.sub (s, 1)) --> bolada print (string.sub (s, 5, 6)) --> da print (string.sub (s, -4)) --> lada • String.len a = "boi" b = "formiga" print (#a, #b) --> 3 7 Manipulação de String
  • 21. • .. a = "seg" .. "unda" b = "feira" print (a .. "-" .. b) --> segunda-feira • string.find local s = "Ciência da Computação" local a = string.find(s,"ê") print( a ) --> 3 • string.gsub local s = "boi,bola,balao“ Manipulação de String
  • 22. • Tabelas são o único mecanismo de estruturação de dados em Lua. Tabelas implementam diretamente arrays associativos e arrays numéricos, e podem ser usadas para implementar diversas outras estruturas de dados, como conjuntos e grafos. • Alem disso, tabelas são usadas para representar registros, objetos e módulos Lua. Tabelas
  • 23. local tab ={4, “lua”, false} tab[1] --> 4 Tamanho da tabela # local t = {"a", "b", "c"} print (#t) --> 3 table.insert (t, "d") print (#t) --> 4 t [6] = "8“ --[[ Temos um valor nil no meio do array (t[5]). O operador de tamanho não tem um comportamento bem definido neste caso]] Tabelas
  • 24. local t = {} for i=1, 3 do table.insert (t, i) end print (t[1]) --> 1 print (t[2]) --> 2 print (t[3]) --> 3 table.insert (t, 2, 4)--array, posição, valor print (t[1]) --> 1 print (t[2]) --> 4 print (t[3]) --> 2 print (t[4]) --> 3 table.remove(t) --remove o ultimo elemento table.remove(t, 2) --remove segundo o elemento Tabelas
  • 25. • Tabela com Array associativo local tab2 = {x=100, y=200, z=50} print(tab2[“y”],tab2.z) --> 200 50 • Mais exemplos entry { name = "Brasil", capital = "Braslia", netdomain = "br", population = 186757608 } entry { name = "Argentina", capital = "Buenos Aires", netdomain = "ar", population = 40677348 Linguagem de descrição de Dados
  • 26. • Lua não e uma linguagem orientada a objetos, mas provê mecanismos que tornam possível a programação orientada a objetos (POO) (há, inclusive, mais de uma maneira de programar orientado a objetos em Lua). POO em Lua
  • 27. Classe rectangle Objeto: Rectangle = { width = 0, height = 0 } Método calcula a área: function Rectangle:area (self) return self.width * self.height end Rectangle.width = 6 Rectangle.height = 3 local ret1 = Rectangle:area(Rectangle) print (ret1) --> 18 POO em LUA
  • 28. 01 #include <stdio.h> 02 #include <string.h> 03 #include "lua.h" 04 #include "lauxlib.h" 05 #include "lualib.h" 06 07 int main () { 08 char buff [256]; 09 int error; 10 lua_State *L = luaL_newstate (); /* cria um novo estado Lua */ 11 luaL_openlibs (L); /* da acesso a todas as bibliotecas padr~oes */ 12 13 while (fgets (buff, sizeof (buff), stdin) != NULL) { 14 error = luaL_loadbuffer (L, buff, strlen (buff), "line") || 15 lua_pcall (L, 0, 0, 0); 16 if (error) { 17 fprintf (stderr, "%s", lua_tostring (L, -1)); 18 lua_pop (L, 1); /* retira a mensagem de erro da pilha */ 19 } 20 } 21 22 lua_close (L); 23 return 0; 24 } API C Usando Lua em Aplicação C
  • 29. Ferramentas Frameworks IDE’s Lua Glider Eclipse LuaEdit QLua Free (Android) Corona SDK Cocos2d-x AAMO MOAI
  • 30. • Para um arquivo com 100K, Lua o trata em 1.2 seg, Perl em 5.3 seg, e Python em 16.8 seg. • O núcleo da linguagem somado as suas bibliotecas padrões ocupa menos de 200k. • Presente em mais de 80 países • Única linguagem de programação desenvolvida fora do primeiro mundo a ter aceitação mundial Curiosidades
  • 31. • www.lua.org • lua-users.org • LabLua. Lua, Conceitos Basicos e API C (Agosto de 2008). www.lua.inf.puc-rio.br Referências