Laécio Freitas Chaves A LINGUAGEM LUA E SUAS APLICAÇ ÕES
O QUE É LUA <ul><li>Mais uma linguagem de script </li></ul><ul><ul><li>= dinâmica </li></ul></ul><ul><li>Uma linguagem de ...
ONDE LUA É DESENVOLVIDA <ul><li>Desenvolvida na PUC-Rio </li></ul><ul><ul><li>desde 1993 </li></ul></ul><ul><li>•  &quot;C...
PORQUE LUA <ul><li>Portabilidade </li></ul><ul><li>Simplicidade </li></ul><ul><li>Pequeno tamanho </li></ul><ul><li>Acopla...
PORTABILIDADE <ul><li>escrita em ANSI C, compila o mesmo código em todas as plataformas </li></ul><ul><li>Unix, Windows (i...
SIMPLICIDADE <ul><li>Um único tipo de estrutura de dados </li></ul><ul><ul><li>Tabelas </li></ul></ul><ul><li>Um único tip...
PEQUENO TAMANHO <ul><li>Menos de 200K </li></ul><ul><li>bibliotecas independentes (e removíveis) </li></ul>
ACOPLABILIDADE <ul><li>Bi-direcional! </li></ul><ul><li>Acoplada em C/C++, Java, Fortran, C#, Perl, Ruby, Ada, etc. </li><...
EFICIENTE <ul><li>Lua entre as mais rápidas no grupo de linguagens interpretadas com tipagem dinâmica </li></ul>
ONDE É USADA
GRIM FANDANGO –  LUCASARTS <ul><li>Adventure </li></ul><ul><ul><li>Utiliza uma versão modificada de Lua 3.1 como linguagem...
ESCAPE FROM MONKEY ISLAND –  LUCASARTS <ul><li>Adventure </li></ul><ul><ul><li>Também utiliza uma versão modificada de  Lu...
PSYCHONAUTS –  DOUBLE FINE <ul><li>Action </li></ul><ul><ul><li>Toda lógica do jogo implementada em Lua </li></ul></ul><ul...
IMPOSSIBLE CREATURES –  RELIC <ul><li>Lua usada em </li></ul><ul><ul><ul><li>Controle de IA </li></ul></ul></ul><ul><ul><u...
 
 
 
LIGHTROOM
LUAROCKS <ul><li>sistema de distribuição e gerenciamento para módulos  Lua </li></ul><ul><li>permite que você instale módu...
MÓDULOS <ul><li>CGILua </li></ul><ul><li>LuaFileSystem </li></ul><ul><li>LuaSocket </li></ul><ul><li>Orbit </li></ul><ul><...
INTRODUÇÃO A LINGUAGEM LUA
CONVENÇÕES LÉXICAS <ul><li>Palavras-chave </li></ul><ul><ul><li>And   break   do   else   elseif   end   false   for   fun...
CONVENÇÕES LÉXICAS… <ul><li>Diferencia minúsculas de maiúsculas   </li></ul><ul><li>and ~= AND ~= And </li></ul>
ITENS LÉXICOS   <ul><li>+  -  *  /  %  ^  #  ==  ~=  <=  >=  <  >  =  (  )  {  }  [  ]  ;  :  ,  .  ..  ...   </li></ul>
COMENTÁRIO S <ul><li>-- Comentário de uma linha </li></ul><ul><li>-- [[ Esse é um comentário de  </li></ul><ul><li>múltipl...
VARIÁVEIS <ul><li>São globais por padrão </li></ul><ul><li>mensagem </li></ul><ul><li>mensagem =  “Hello, word “ </li></ul...
ATRIBUIÇÃO   <ul><ul><li>x =  3 </li></ul></ul><ul><ul><li>x, y =  3, 2 </li></ul></ul><ul><ul><li>x, y = y, x </li></ul><...
VALORES E TIPOS   <ul><li>Dinamicamente tipada </li></ul><ul><li>local  var = “ oi “ -- contém uma   string </li></ul><ul>...
TIPOS <ul><li>Nil </li></ul><ul><li>Boolean </li></ul><ul><li>Number </li></ul><ul><li>String </li></ul><ul><li>Function <...
NIL E BOOLEAN <ul><li>Representa a ausência de um valor útil   </li></ul><ul><li>Representa true e false </li></ul><ul><li...
NUMBER <ul><li>Números </li></ul><ul><li>Equivale a um double (por padrão) </li></ul><ul><li>Sem problema para representar...
STRING <ul><li>Cadeias de caracteres literais   </li></ul><ul><li>Podem ser delimitadas através do uso de aspas simples ou...
COERÇÃO E CONCATENAÇÃO <ul><li>Conversão automática   </li></ul><ul><li>local  str1 =  &quot;As armas &quot;  </li></ul><u...
FUNCTION <ul><li>Representa as funções </li></ul><ul><li>Valores de primeira classe </li></ul><ul><li>Pode ter nenhum ou v...
USERDATA <ul><li>Permite que dados C arbitrários possam ser armazenados em variáveis Lua.   </li></ul>
THREAD <ul><li>Representa fluxos de execução independentes </li></ul><ul><li>é usado para implementar co-rotinas   </li></ul>
TABLE <ul><li>Implementa arrays associativos  </li></ul><ul><li>Representar arrays comuns, tabelas de símbolos, conjuntos,...
EXPRESSÕES <ul><li>aritméticas </li></ul><ul><ul><li>op:  +  -  *  /  ^  % </li></ul></ul><ul><ul><li>ex:  1 + 1   (v /  2...
EXPRESSÕES  <ul><li>lógicas </li></ul><ul><ul><li>op:  and  or  not </li></ul></ul><ul><ul><li>ex:  1  and   2      2 </l...
ESTRUTURAS DE CONTROLE   LOCAL  X =  1 <ul><li>while  exp  do   while  x < 10  do </li></ul><ul><li>bloco  print (x) </li>...
O COMANDO FOR E SUAS VARIAÇÕES   <ul><li>Numérica </li></ul><ul><li>for  i = 1, 10, 1  do </li></ul><ul><li>  if  i % 2 ==...
O COMANDO FOR E SUAS VARIAÇÕES... <ul><li>Genérica   </li></ul><ul><ul><li>hero = { name =  &quot;Freddy Hardest&quot; , <...
BIBLIOTECA BÁSICA <ul><li>funções de uso geral </li></ul><ul><li>assert, dofile, error,  _G , ipairs, next, pairs, pcall, ...
BIBLIOTECA MATH <ul><li>funções trigonométricas </li></ul><ul><li>exponenciação e logaritmo </li></ul><ul><li>arredondamen...
BIBLIOTECA TABLE <ul><li>tabelas como  arrays </li></ul><ul><li>inserção e remoção </li></ul><ul><li>ordenação </li></ul><...
BIBLIOTECA STRING <ul><li>funções básicas </li></ul><ul><li>string .sub ,  string .format,  string .rep,  string .find,  s...
OUTRAS BIBLIOTECAS  <ul><li>Debug ->  Depuração </li></ul><ul><li>File ->  Entrada e saída </li></ul><ul><li>Os ->  Funçõe...
Lua Eclipse <ul><li>http://luaeclipse.luaforge.net/preview/update-site/   </li></ul><ul><ul><li>Linux with GTK (x86) http:...
Lua for Windows <ul><li>http://code.google.com/p/luaforwindows/   </li></ul><ul><li>http://luaforge.net/projects/luaforwin...
Lua no Ubuntu <ul><li>sudo apt-get install  lua51 </li></ul><ul><li>wget  http://www.lua.org/ftp/lua-5 .1.4. tar . gz   </...
 
 
Upcoming SlideShare
Loading in …5
×

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

1,042 views

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,042
On SlideShare
0
From Embeds
0
Number of Embeds
8
Actions
Shares
0
Downloads
38
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

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

  1. 1. Laécio Freitas Chaves A LINGUAGEM LUA E SUAS APLICAÇ ÕES
  2. 2. O QUE É LUA <ul><li>Mais uma linguagem de script </li></ul><ul><ul><li>= dinâmica </li></ul></ul><ul><li>Uma linguagem de Descrição de Dados </li></ul><ul><ul><li>Não totalmente diferente de XML </li></ul></ul><ul><li>Única linguagem de programação desenvolvida fora do primeiro mundo a ter aceitação mundial </li></ul><ul><li>C entenas de milhares de usuários </li></ul><ul><li>Usada por Intel , Conectiva, Microsoft , LucasArts , Petrobras , etc. </li></ul>
  3. 3. ONDE LUA É DESENVOLVIDA <ul><li>Desenvolvida na PUC-Rio </li></ul><ul><ul><li>desde 1993 </li></ul></ul><ul><li>• &quot;Comitê&quot; de três pessoas </li></ul><ul><ul><li>Roberto Ierusalimschy, Luiz H. de Figueiredo, Waldemar Celes </li></ul></ul>
  4. 4. PORQUE LUA <ul><li>Portabilidade </li></ul><ul><li>Simplicidade </li></ul><ul><li>Pequeno tamanho </li></ul><ul><li>Acoplabilidade </li></ul><ul><li>Eficiência </li></ul>
  5. 5. PORTABILIDADE <ul><li>escrita em ANSI C, compila o mesmo código em todas as plataformas </li></ul><ul><li>Unix, Windows (incluindo CE), Playstation II, OS/390, XBox, BeOS, DOS, Palm OS, EPOC, sistemas embutidos, etc. </li></ul>
  6. 6. SIMPLICIDADE <ul><li>Um único tipo de estrutura de dados </li></ul><ul><ul><li>Tabelas </li></ul></ul><ul><li>Um único tipo numérico </li></ul><ul><ul><li>tipicamente double </li></ul></ul><ul><li>Mecanismos ao invés de políticas </li></ul><ul><ul><li>e.g., orientação a objetos </li></ul></ul>
  7. 7. PEQUENO TAMANHO <ul><li>Menos de 200K </li></ul><ul><li>bibliotecas independentes (e removíveis) </li></ul>
  8. 8. ACOPLABILIDADE <ul><li>Bi-direcional! </li></ul><ul><li>Acoplada em C/C++, Java, Fortran, C#, Perl, Ruby, Ada, etc. </li></ul>
  9. 9. EFICIENTE <ul><li>Lua entre as mais rápidas no grupo de linguagens interpretadas com tipagem dinâmica </li></ul>
  10. 10. ONDE É USADA
  11. 11. GRIM FANDANGO – LUCASARTS <ul><li>Adventure </li></ul><ul><ul><li>Utiliza uma versão modificada de Lua 3.1 como linguagem de script </li></ul></ul>
  12. 12. ESCAPE FROM MONKEY ISLAND – LUCASARTS <ul><li>Adventure </li></ul><ul><ul><li>Também utiliza uma versão modificada de Lua 3.1 como linguagem de script </li></ul></ul>
  13. 13. PSYCHONAUTS – DOUBLE FINE <ul><li>Action </li></ul><ul><ul><li>Toda lógica do jogo implementada em Lua </li></ul></ul><ul><ul><li>J ogo controlado por entidades com scripts </li></ul></ul>
  14. 14. IMPOSSIBLE CREATURES – RELIC <ul><li>Lua usada em </li></ul><ul><ul><ul><li>Controle de IA </li></ul></ul></ul><ul><ul><ul><li>Aparência de efeitos e de outros elementos gráficos </li></ul></ul></ul><ul><ul><ul><li>Determinação das regras do jogo </li></ul></ul></ul><ul><ul><ul><li>Edição dos atributos dos personagens </li></ul></ul></ul><ul><ul><ul><li>Debug em tempo real </li></ul></ul></ul>
  15. 18. LIGHTROOM
  16. 19. LUAROCKS <ul><li>sistema de distribuição e gerenciamento para módulos Lua </li></ul><ul><li>permite que você instale módulos Lua </li></ul><ul><ul><li>Rocks </li></ul></ul><ul><li>contém informação sobre dependência de versão </li></ul><ul><li>é uma aplicação de “puro Lua” </li></ul>
  17. 20. MÓDULOS <ul><li>CGILua </li></ul><ul><li>LuaFileSystem </li></ul><ul><li>LuaSocket </li></ul><ul><li>Orbit </li></ul><ul><li>Xavante </li></ul><ul><li>LuaSql </li></ul><ul><li>LuaZip </li></ul><ul><li>MD5 </li></ul><ul><li>... </li></ul>
  18. 21. INTRODUÇÃO A LINGUAGEM LUA
  19. 22. CONVENÇÕES LÉXICAS <ul><li>Palavras-chave </li></ul><ul><ul><li>And break do else elseif end false for function if in local nil not or repeat return then true until while </li></ul></ul>
  20. 23. CONVENÇÕES LÉXICAS… <ul><li>Diferencia minúsculas de maiúsculas </li></ul><ul><li>and ~= AND ~= And </li></ul>
  21. 24. ITENS LÉXICOS <ul><li>+ - * / % ^ # == ~= <= >= < > = ( ) { } [ ] ; : , . .. ... </li></ul>
  22. 25. COMENTÁRIO S <ul><li>-- Comentário de uma linha </li></ul><ul><li>-- [[ Esse é um comentário de </li></ul><ul><li>múltiplas linhas]] </li></ul>
  23. 26. VARIÁVEIS <ul><li>São globais por padrão </li></ul><ul><li>mensagem </li></ul><ul><li>mensagem = “Hello, word “ </li></ul><ul><li>print (mensagem) </li></ul><ul><li>Variável local </li></ul><ul><li> local mensagem = “Hello, word “ </li></ul><ul><li>print (mensagem) </li></ul>
  24. 27. ATRIBUIÇÃO <ul><ul><li>x = 3 </li></ul></ul><ul><ul><li>x, y = 3, 2 </li></ul></ul><ul><ul><li>x, y = y, x </li></ul></ul><ul><ul><li>x, y, z = 3, 2 -- z recebe nil </li></ul></ul><ul><ul><li>x, y = 3, 4 ,5, 6, 7 -- 5, 6 e 7 descartados </li></ul></ul>
  25. 28. VALORES E TIPOS <ul><li>Dinamicamente tipada </li></ul><ul><li>local var = “ oi “ -- contém uma string </li></ul><ul><li>var = 3.14 -- Agora é um número </li></ul><ul><li>var = true -- e agora é um boolean </li></ul><ul><li>Valores de primeira classe </li></ul>
  26. 29. TIPOS <ul><li>Nil </li></ul><ul><li>Boolean </li></ul><ul><li>Number </li></ul><ul><li>String </li></ul><ul><li>Function </li></ul><ul><li>Table </li></ul><ul><li>Userdata </li></ul><ul><li>Thread </li></ul>
  27. 30. NIL E BOOLEAN <ul><li>Representa a ausência de um valor útil </li></ul><ul><li>Representa true e false </li></ul><ul><li>Variáveis não inicializadas têm valor nil </li></ul><ul><li>Qualquer valor diferente de nil e false è verdadeiro </li></ul><ul><ul><li>String vazia (&quot;&quot;) e zero (0) são considerados verdadeiros </li></ul></ul>
  28. 31. NUMBER <ul><li>Números </li></ul><ul><li>Equivale a um double (por padrão) </li></ul><ul><li>Sem problema para representar inteiros </li></ul>
  29. 32. STRING <ul><li>Cadeias de caracteres literais   </li></ul><ul><li>Podem ser delimitadas através do uso de aspas simples ou aspas duplas </li></ul><ul><ul><li>local mensagem = ‘oi’ </li></ul></ul><ul><ul><li>local mensagem = “oi” </li></ul></ul><ul><li>Podem conter as seguintes seqüências de escape no estilo de C </li></ul><ul><ul><li>local mensagem = “oi 123” </li></ul></ul><ul><li>Formato longo </li></ul><ul><ul><li>local mensagem = [[Cadeias literais longas]] </li></ul></ul>
  30. 33. COERÇÃO E CONCATENAÇÃO <ul><li>Conversão automática </li></ul><ul><li>local str1 = &quot;As armas &quot; </li></ul><ul><li>local str2 = &quot;e os barões&quot; </li></ul><ul><li>local concatenada = str1..str2 </li></ul><ul><li>print (&quot;1.234&quot; + 4.321) --> 5.555 </li></ul><ul><li>print (&quot;Valor: &quot; ..171) --> &quot;Valor:171&quot; </li></ul>
  31. 34. FUNCTION <ul><li>Representa as funções </li></ul><ul><li>Valores de primeira classe </li></ul><ul><li>Pode ter nenhum ou vários de parâmetros </li></ul><ul><li>Pode retornar nenhum ou vários valores </li></ul><ul><ul><ul><ul><ul><li>foo = ‘Cadeia de Carac...’ </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>function foo_1(n) </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>return 1 </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>end </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>foo_2 = function (n) </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>return 1, 2, 3 </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>end </li></ul></ul></ul></ul></ul>
  32. 35. USERDATA <ul><li>Permite que dados C arbitrários possam ser armazenados em variáveis Lua. </li></ul>
  33. 36. THREAD <ul><li>Representa fluxos de execução independentes </li></ul><ul><li>é usado para implementar co-rotinas </li></ul>
  34. 37. TABLE <ul><li>Implementa arrays associativos </li></ul><ul><li>Representar arrays comuns, tabelas de símbolos, conjuntos, registros, grafos, árvores, etc. </li></ul><ul><li>Existem várias maneiras convenientes de se criar tabelas em Lua </li></ul><ul><li>Podem conter funções </li></ul><ul><li>local t = { } </li></ul><ul><li>local t={4, ‘lua’ , false} </li></ul><ul><li> t[1]=4, t[2]= ‘lua’ , t[3]=false </li></ul><ul><li>local t = { nome = &quot;Fulano&quot; , idade = 33} </li></ul><ul><ul><li>print (t[ &quot;nome&quot; ]) --> &quot;Fulano&quot; </li></ul></ul><ul><ul><li>print (t.nome) --> &quot;Fulano&quot; </li></ul></ul><ul><ul><li>print (t.idade) --> 33 </li></ul></ul>
  35. 38. EXPRESSÕES <ul><li>aritméticas </li></ul><ul><ul><li>op: + - * / ^ % </li></ul></ul><ul><ul><li>ex: 1 + 1 (v / 2 )^ 2 -x </li></ul></ul><ul><ul><li>número -> número </li></ul></ul><ul><li>de concatenação </li></ul><ul><ul><li>op: .. </li></ul></ul><ul><ul><li>ex: “João” .. “ e “ .. “Maria” </li></ul></ul><ul><ul><li>string -> string </li></ul></ul>
  36. 39. EXPRESSÕES <ul><li>lógicas </li></ul><ul><ul><li>op: and or not </li></ul></ul><ul><ul><li>ex: 1 and 2  2 </li></ul></ul><ul><ul><li>1 and false  false </li></ul></ul><ul><ul><li>not val  false </li></ul></ul><ul><ul><li>1 or 2  1 </li></ul></ul><ul><li>relacionais </li></ul><ul><ul><li>op: < > <= >= == ~= </li></ul></ul><ul><ul><li>ex: 1 <= 2 “a” ~= ”a” 1== ”1” x>y </li></ul></ul><ul><ul><li>valor -> boolean </li></ul></ul>
  37. 40. ESTRUTURAS DE CONTROLE LOCAL X = 1 <ul><li>while exp do while x < 10 do </li></ul><ul><li>bloco print (x) </li></ul><ul><li>i = i + 1 </li></ul><ul><li>end end </li></ul><ul><li>repeat repeat </li></ul><ul><li>bloco print (x) </li></ul><ul><li>until exp until x < 10 </li></ul><ul><li>if exp then if x == 1 then </li></ul><ul><li>bloco print (‘x = 1’) </li></ul><ul><li>elseif exp then elseif x==2 then </li></ul><ul><li>bloco print (x==2) </li></ul><ul><li>else else </li></ul><ul><li>bloco print (‘x ~= 1e x~= 2’) </li></ul><ul><li>end end </li></ul>
  38. 41. O COMANDO FOR E SUAS VARIAÇÕES <ul><li>Numérica </li></ul><ul><li>for i = 1, 10, 1 do </li></ul><ul><li> if i % 2 == 0 then </li></ul><ul><li> print ( tostring (i).. &quot;é par.&quot; ) </li></ul><ul><li>else </li></ul><ul><li> print ( tostring (i).. &quot; é ímpar.&quot; ) </li></ul><ul><li> end </li></ul><ul><li>end </li></ul>
  39. 42. O COMANDO FOR E SUAS VARIAÇÕES... <ul><li>Genérica </li></ul><ul><ul><li>hero = { name = &quot;Freddy Hardest&quot; , </li></ul></ul><ul><ul><li>speed = 3 , </li></ul></ul><ul><ul><li>strength = 12 , </li></ul></ul><ul><ul><li>intelligence = 7 } </li></ul></ul><ul><ul><li>for k, v in pairs (hero) do </li></ul></ul><ul><ul><li>print (k..&quot;-->&quot;.. v) </li></ul></ul><ul><ul><li>end </li></ul></ul>
  40. 43. BIBLIOTECA BÁSICA <ul><li>funções de uso geral </li></ul><ul><li>assert, dofile, error, _G , ipairs, next, pairs, pcall, print , tonumber , tostring , type , unpack, _VERSION </li></ul>
  41. 44. BIBLIOTECA MATH <ul><li>funções trigonométricas </li></ul><ul><li>exponenciação e logaritmo </li></ul><ul><li>arredondamento </li></ul><ul><li>max, min </li></ul><ul><li>randomização </li></ul><ul><li>math .sin , math .pi , math .log, math .pow , math .sqrt, math .random </li></ul>
  42. 45. BIBLIOTECA TABLE <ul><li>tabelas como arrays </li></ul><ul><li>inserção e remoção </li></ul><ul><li>ordenação </li></ul><ul><li>concatenação </li></ul><ul><li>table .insert , table .remove , table .sort, table .concat, table .maxn </li></ul>
  43. 46. BIBLIOTECA STRING <ul><li>funções básicas </li></ul><ul><li>string .sub , string .format, string .rep, string .find, string .lower , string .len </li></ul>
  44. 47. OUTRAS BIBLIOTECAS <ul><li>Debug -> Depuração </li></ul><ul><li>File -> Entrada e saída </li></ul><ul><li>Os -> Funções de sistema e data e hora </li></ul>
  45. 48. Lua Eclipse <ul><li>http://luaeclipse.luaforge.net/preview/update-site/ </li></ul><ul><ul><li>Linux with GTK (x86) http://luaeclipse.luaforge.net/preview/update-site/linux . gtk .x86/ </li></ul></ul><ul><ul><li>Linux with GTK (amd64) http://luaeclipse.luaforge.net/preview/update-site/linux . gtk .x86_64/ </li></ul></ul><ul><ul><li>Mac OSX (ppc & x86) http://luaeclipse.luaforge.net/preview/update-site/macosx . carbon / </li></ul></ul><ul><ul><li>MS Windows (Win32) http://luaeclipse.luaforge.net/preview/update-site/win32 .win32.x86/ </li></ul></ul>
  46. 49. Lua for Windows <ul><li>http://code.google.com/p/luaforwindows/ </li></ul><ul><li>http://luaforge.net/projects/luaforwindows/ </li></ul>
  47. 50. Lua no Ubuntu <ul><li>sudo apt-get install lua51 </li></ul><ul><li>wget  http://www.lua.org/ftp/lua-5 .1.4. tar . gz </li></ul><ul><li>tar zxf lua-5.1.4.tar.gz </li></ul><ul><li>cd lua-5.1.4 make linux test install </li></ul>

×