5.ii sacic - 2010 - desenvolvimento de aplicações para tvdigital com nclua

52
http://lims.ifpi.edu.br Laécio Freitas Chaves A LINGUAGEM LUA E SUAS APLICAÇÕES

Upload: candido-gomes

Post on 12-Jul-2015

885 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: 5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA

http://lims.ifpi.edu.br

Laécio Freitas Chaves

A LINGUAGEM LUA E SUAS APLICAÇÕES

Page 2: 5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA

http://lims.ifpi.edu.br

O QUE É LUA• Mais uma linguagem de script

• = dinâmica

• Uma linguagem de Descrição de Dados• Não totalmente diferente de XML

• Única linguagem de programação desenvolvida fora do primeiro mundo a ter aceitação mundial

• Centenas de milhares de usuários

• Usada por Intel, Conectiva, Microsoft, LucasArts, Petrobras, etc.

Page 3: 5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA

http://lims.ifpi.edu.br

ONDE LUA É DESENVOLVIDA

• Desenvolvida na PUC-Rio• desde 1993

• "Comitê" de três pessoas• Roberto Ierusalimschy, Luiz H. de Figueiredo,

Waldemar Celes

Page 4: 5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA

http://lims.ifpi.edu.br

PORQUE LUA

• Portabilidade

• Simplicidade

• Pequeno tamanho

• Acoplabilidade

• Eficiência

Page 5: 5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA

http://lims.ifpi.edu.br

PORTABILIDADE

• escrita em ANSI C, compila o mesmo código em todas as plataformas

• Unix, Windows (incluindo CE), Playstation II, OS/390, XBox, BeOS, DOS, Palm OS, EPOC, sistemas embutidos, etc.

Page 6: 5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA

http://lims.ifpi.edu.br

SIMPLICIDADE

• Um único tipo de estrutura de dados• Tabelas

• Um único tipo numérico• tipicamente double

• Mecanismos ao invés de políticas

• e.g., orientação a objetos

Page 7: 5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA

http://lims.ifpi.edu.br

PEQUENO TAMANHO

• Menos de 200K

• bibliotecas independentes (e removíveis)

Page 8: 5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA

http://lims.ifpi.edu.br

ACOPLABILIDADE

• Bi-direcional!

• Acoplada em C/C++, Java, Fortran, C#, Perl, Ruby, Ada, etc.

Page 9: 5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA

http://lims.ifpi.edu.br

EFICIENTE

• Lua entre as mais rápidas no grupo de linguagens interpretadas com tipagem dinâmica

Page 10: 5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA

http://lims.ifpi.edu.br

ONDE É USADA

Page 11: 5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA

http://lims.ifpi.edu.br

GRIM FANDANGO – LUCASARTS• Adventure

• Utiliza uma versão modificada de Lua 3.1 como linguagem de script

Page 12: 5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA

http://lims.ifpi.edu.br

ESCAPE FROM MONKEY ISLAND – LUCASARTS

• Adventure• Também utiliza uma versão modificada de

Lua 3.1 como linguagem de script

Page 13: 5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA

http://lims.ifpi.edu.br

PSYCHONAUTS – DOUBLE FINE• Action

• Toda lógica do jogo implementada em Lua

• Jogo controlado por entidades com scripts

Page 14: 5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA

http://lims.ifpi.edu.br

IMPOSSIBLE CREATURES – RELIC• Lua usada em

• Controle de IA

• Aparência de efeitos e de outros elementos gráficos

• Determinação das regras do jogo

• Edição dos atributos dos personagens

• Debug em tempo real

Page 15: 5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA

http://lims.ifpi.edu.br

Page 16: 5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA

http://lims.ifpi.edu.br

Page 17: 5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA

http://lims.ifpi.edu.br

Page 18: 5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA

http://lims.ifpi.edu.br

LIGHTROOM

Page 19: 5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA

http://lims.ifpi.edu.br

LUAROCKS

• sistema de distribuição e gerenciamento para módulos Lua

• permite que você instale módulos Lua • Rocks

• contém informação sobre dependência de versão

• é uma aplicação de “puro Lua”

Page 20: 5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA

http://lims.ifpi.edu.br

MÓDULOS• CGILua• LuaFileSystem• LuaSocket• Orbit• Xavante• LuaSql• LuaZip• MD5• ...

Page 21: 5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA

http://lims.ifpi.edu.br

INTRODUÇÃO A LINGUAGEM LUA

Page 22: 5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA

http://lims.ifpi.edu.br

CONVENÇÕES LÉXICAS• Palavras-chave

 And   break   do   else  elseif   end   false   for    function   if   in   local    nil   not   or   repeat  

 return   then   true   until    while

Page 23: 5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA

http://lims.ifpi.edu.br

CONVENÇÕES LÉXICAS…

• Diferencia minúsculas de maiúsculas

and ~= AND ~= And

Page 24: 5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA

http://lims.ifpi.edu.br

ITENS LÉXICOS

+     ­     *     /     %     ^     #     ==    ~=    <=    >=    <     >     =     (     )     {     }     [     ]     ;     :     ,     .     ..    ... 

Page 25: 5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA

http://lims.ifpi.edu.br

COMENTÁRIOS

• ­­ Comentário de uma linha

• ­­ [[ Esse é um comentário de 

          múltiplas linhas]]

Page 26: 5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA

http://lims.ifpi.edu.br

VARIÁVEIS• São globais por padrão mensagem     mensagem = “Hello, word“

     print(mensagem)

• Variável local local mensagem = “Hello, word“

      print(mensagem)

Page 27: 5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA

http://lims.ifpi.edu.br

ATRIBUIÇÃO

x = 3

x, y = 3, 2

x, y = y, x

x, y, z = 3, 2  ­­ z recebe nil

x, y = 3, 4 ,5, 6, 7   ­­ 5, 6 e 7               

descartados

Page 28: 5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA

http://lims.ifpi.edu.br

VALORES E TIPOS

• Dinamicamente tipada  local var = “oi“ ­­ contém uma      

string

 var = 3.14 ­­ Agora é um número var = true ­­ e agora é um boolean

• Valores de primeira classe

Page 29: 5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA

http://lims.ifpi.edu.br

TIPOS

• Nil• Boolean• Number• String• Function• Table• Userdata• Thread

Page 30: 5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA

http://lims.ifpi.edu.br

NIL E BOOLEAN

• Representa a ausência de um valor útil

• Representa true e false

• Variáveis não inicializadas têm valor nil

• Qualquer valor diferente de nil e false è verdadeiro • String vazia ("") e zero (0) são considerados

verdadeiros

Page 31: 5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA

http://lims.ifpi.edu.br

NUMBER

• Números

• Equivale a um double (por padrão)

• Sem problema para representar inteiros

Page 32: 5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA

http://lims.ifpi.edu.br

STRING• Cadeias de caracteres literais • Podem ser delimitadas através do uso de aspas

simples ou aspas duplas• local mensagem = ‘oi’

• local mensagem = “oi”

• Podem conter as seguintes seqüências de escape no estilo de C• local mensagem = “oi\n123”

• Formato longo• local mensagem = [[Cadeias literais longas]]

Page 33: 5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA

http://lims.ifpi.edu.br

COERÇÃO E CONCATENAÇÃO

• Conversão automática

 local str1 = "As armas "   local str2 = "e os barões"

local concatenada = str1..str2

  print ("1.234" + 4.321) ­­> 5.555

  print ("Valor: "..171) ­­> "Valor:171"

Page 34: 5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA

http://lims.ifpi.edu.br

FUNCTION• Representa as funções• Valores de primeira classe• Pode ter nenhum ou vários de parâmetros• Pode retornar nenhum ou vários valores

foo = ‘Cadeia de Carac...’ 

function foo_1(n)

return 1

end

foo_2 = function(n)

return 1, 2, 3

end

Page 35: 5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA

http://lims.ifpi.edu.br

USERDATA• Permite que dados C arbitrários possam ser armazenados em variáveis

Lua.

Page 36: 5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA

http://lims.ifpi.edu.br

THREAD• Representa fluxos de execução independentes

• é usado para implementar co-rotinas

Page 37: 5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA

http://lims.ifpi.edu.br

TABLE• Implementa arrays associativos • Representar arrays comuns, tabelas de símbolos, conjuntos, registros, grafos,

árvores, etc. • Existem várias maneiras convenientes de se criar tabelas em Lua • Podem conter funções

      local t = { }      local t={4, ‘lua’, false}        t[1]=4, t[2]=‘lua’, t[3]=false             local t = { nome = "Fulano", idade = 33}                

       print (t["nome"]) ­­> "Fulano"   print (t.nome) ­­> "Fulano"   print (t.idade) ­­> 33   

Page 38: 5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA

http://lims.ifpi.edu.br

EXPRESSÕES• aritméticas

op: +  ­  *  /  ^  % ex: 1+1   (v / 2)^2    ­x número -> número

de concatenação

op: .. ex: “João” .. “ e “ .. “Maria” string -> string

Page 39: 5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA

http://lims.ifpi.edu.br

EXPRESSÕES • lógicas

op: and  or  not ex: 1 and 2  2    1 and false  false      not val  false    1 or 2  1

relacionais

op: <  >  <=  >=  == ~= ex: 1<=2  “a”~=”a”  1==”1”  x>y valor -> boolean

Page 40: 5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA

http://lims.ifpi.edu.br

ESTRUTURAS DE CONTROLE LOCAL X = 1

• while exp do               while x < 10 dobloco                     print(x)

                                 i = i + 1 end                        end

• repeat                     repeatbloco                     print(x)

until exp                 until x < 10

• if exp then                if x == 1 thenbloco                     print(‘x = 1’)

elseif exp then            elseif x==2 thenbloco                     print(x==2)

else                       elsebloco                     print(‘x ~= 1e x~= 2’)

end                        end

Page 41: 5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA

http://lims.ifpi.edu.br

O COMANDO FOR E SUAS VARIAÇÕES • Numérica

for i = 1, 10, 1 do  if i % 2 == 0 then

 print (tostring(i).."é par.")    else

 print (tostring(i).." é ímpar.")  end

  end

Page 42: 5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA

http://lims.ifpi.edu.br

O COMANDO FOR E SUAS VARIAÇÕES...

• Genérica

hero = { name = "Freddy Hardest",

         speed = 3,

         strength = 12,

         intelligence = 7 }

for k, v in pairs (hero) do

print (k.."­­>".. v)

end

Page 43: 5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA

http://lims.ifpi.edu.br

BIBLIOTECA BÁSICA• funções de uso geral

• assert, dofile, error, _G, ipairs, next, pairs, pcall, print, tonumber, tostring, type, unpack, _VERSION

Page 44: 5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA

http://lims.ifpi.edu.br

BIBLIOTECA MATH

• funções trigonométricas• exponenciação e logaritmo• arredondamento• max, min• randomização

• math.sin, math.pi, math.log, math.pow, math.sqrt, math.random

Page 45: 5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA

http://lims.ifpi.edu.br

BIBLIOTECA TABLE

• tabelas como arrays• inserção e remoção• ordenação• concatenação

• table.insert, table.remove, table.sort, table.concat, table.maxn

Page 46: 5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA

http://lims.ifpi.edu.br

BIBLIOTECA STRING

• funções básicas

• string.sub, string.format, string.rep, string.find, string.lower, string.len

Page 47: 5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA

http://lims.ifpi.edu.br

OUTRAS BIBLIOTECAS

• Debug -> Depuração• File -> Entrada e saída• Os -> Funções de sistema e data e hora

Page 48: 5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA

http://lims.ifpi.edu.br

Lua Eclipse

• http://luaeclipse.luaforge.net/preview/update-site/

• Linux with GTK (x86)http://luaeclipse.luaforge.net/preview/update-site/linux.gtk.x86/

• Linux with GTK (amd64)http://luaeclipse.luaforge.net/preview/update-site/linux.gtk.x86_64/

• Mac OSX (ppc & x86)http://luaeclipse.luaforge.net/preview/update-site/macosx.carbon/

• MS Windows (Win32)http://luaeclipse.luaforge.net/preview/update-site/win32.win32.x86/

Page 49: 5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA

http://lims.ifpi.edu.br

Lua for Windows

• http://code.google.com/p/luaforwindows/

• http://luaforge.net/projects/luaforwindows/

Page 50: 5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA

http://lims.ifpi.edu.br

Lua no Ubuntu• sudo apt-get install lua51

• wget http://www.lua.org/ftp/lua-5.1.4.tar.gz

• tar zxf lua-5.1.4.tar.gz

• cd lua-5.1.4make linux test install

Page 51: 5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA

http://lims.ifpi.edu.br

Page 52: 5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA

http://lims.ifpi.edu.br