A Linguagem Lua - Uma abordagem inicial

795 views

Published on

Uma apresentação inicial sobre Lua

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
795
On SlideShare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
26
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

A Linguagem Lua - Uma abordagem inicial

  1. 1. Lua – O simples é tudo
  2. 2. A origem de Lua Lua foi criada no Tecgraf, o laboratório de computação gráfica da PUC-Rio. Atualmente, seu desenvolvimento e manutenção é responsabilidade do laboratório Lablua, também localizado na PUC-Rio.
  3. 3. Usos de Lua Jogos  "Is Lua the ultimate game scripting language?" (GDC 2010)  Angry Birds, Civilization V, Fable II, Ragnarok Online, World of Warcraft, The Sims, Farcry  Linguagem de extensão Sistemas Embarcados  Câmeras, Teclado, Impressoras e, claro, TV DIGITAL!  Ginga
  4. 4. Por que Lua? Rapidez  Uma das linguagens de script com melhores resultados em testes de benchmark Portabilidade  Basta a plataforma possuir um compilador ANSI/ISO C. Roda em Unix, Windows e em dispositivos móveis (BREW, Symbian, Pocket PC, Android, iPhone, DS, PSP, PS3) e microprocessadores embutidos (ARM, Rabbit) para aplicações como Lego MindStorms.
  5. 5. Por que Lua? Embutível  API bem documentada e engine rápida, favorecendo a extensão da sua aplicação em C, C+ +, C#, Java, Smalltalk, Ruby, Python, etc. Pequena
  6. 6. Por que Lua? Livre  Código aberto distribuído na licença MIT. Pode ser usada para qualquer propósito, inclusive comerciais.
  7. 7. Uma visão geral de Lua Tipagem dinâmica  Não exige declaração de tipo de dado Interpretada a partir de bytecodes para uma máquina virtual baseada em registradores (LVM) Gerenciamento automático de memória com coleta de lixo incremental (Garbage Collector) Linguagem de extensão e embutida  Interface com C, por exemplo
  8. 8. Talk is cheap...SHOW ME THE CODE!
  9. 9. Interface com C – A extensabilidade de LuaEscrevendo o script em Lua...--script.luaio.write("A tabela recebida pelo script foi: n");x=0for i = 1, #foo do print(i, foo[i]) x = x + foo[i]endio.write("Retornando dados para o C...n");return x
  10. 10. Interface com C – A extensabilidade de LuaEscrevendo o código em C e invocando o script em Lua#include <lua.h>#include <lauxlib.h>#include <stdlib.h>#include <stdio.h>intmain(void){ int status, result, i; double sum; lua_State L; /* Guarda todos os contextos de lua nesta estrutura */ L; L = luaL_newstate(); luaL_openlibs(L); /* Carrega as bibliotecas de Lua*/ status = luaL_loadfile(L, "script.lua"); /*Carrega o script desejado*/ if (status) { fprintf(stderr, "Falha ao carregar o arquivo: %sn", lua_tostring(L, -1)); exit(1); } lua_newtable(L); /* Passaremos uma tabela */ for (i = 1; i <= 5; i++) { lua_pushnumber(L, i); /* Empilha o index da tabela na pilha */ lua_pushnumber(L, i*2); /* Empilha o valor da célula */ lua_rawset(L, -3); /* Guarda o par na tabela */ /*-1 refere-se ao topo da pilha. -3 é a posição da tabela na pilha.*/ } lua_setglobal(L, "foo"); /*Referência da tabela no script Lua*/ result = lua_pcall(L, 0, LUA_MULTRET, 0); if (result) { fprintf(stderr, "Falha ao iniciar o script: %sn", lua_tostring(L, -1)); exit(1); }sum = lua_tonumber(L, -1);printf("Script retornou: %.0fn", sum);lua_pop(L, 1); /*Retira o valor retornado da pilha*/lua_close(L);Return 0;}
  11. 11. Pode isso, Arnaldo!?Afinal, que raio de tabela mágica é essa!?
  12. 12. Entendendo a tabela de Lua O tipo table representa um vetor associativo, implementado internamente com o uso de uma eficiente combinação de array e hash (tabela de dispersão). As tabelas são a única forma de estruturação de dados em Lua. Todas as estruturas de dados comumente encontradas em programação (tais como vetores, listas, filas, conjuntos e hash) podem ser eficientemente (e facilmente) implementadas com o uso de tabelas.
  13. 13. Um pouquinho mais de tabela...local t = {} -- cria nova tabelat[1] = 4 -- armazena 4 no índice 1t[2] = "alo" -- armazena "alo" no índice 2t["alo"] = 5 -- armazena 5 no índice "alo"t[t[2]] = 0 -- armazena 0 no índice "alo" (sobrescrevendo)armas = { faca = { agressao = 0.3, faixaDeAtaque = 0.5, precisao = 1.0, }, espada = { agressao = 0.5, faixaDeAtaque = 1.5, precisao = 0.8, }}
  14. 14. Conceitos básicos de Lua Variáveis e TiposLua apresenta tipagem dinâmica, isto é, o interpretador, em tempo de execução pressupõe qual o tipo de dado da variável. Os tipos estão associados diretamente aos valores armazendos nas variáveis e não às variáveis em si. a = "Exemplo" -- a armazena string b = 1.23 -- b armazena número b = nil -- b armazena nil a = 3 -- a armazena número
  15. 15. Conceitos básicos de Lua Variáveis e TiposToda variável em lua, por padrão, é declarada como global, a menos que a palavra reservada ”local” seja usada.local a -- a é local dentro do bloco declarado ou a um chunk (sequência de comandos Lua em um arquivo de script)a=3
  16. 16. Conceitos básicos de Lua FunçõesFunções em Lua são valores de primeira classe. Isso significa que, como qualquer outro valor, uma função pode ser criada, armazenada em uma variável (local ou global) ou campo de tabela e passada adiante como parâmetro ou valor de retorno de uma outra função. Uma função pode receber zero ou mais valores. A lista de parâmetros é especificada da maneira usual: entre os parênteses que seguem o nome da funcão.
  17. 17. Conceitos básicos de Lua Exemplo de Função fat = function (n) if n==0 then return 1 else return n*fat(n-1) end end
  18. 18. $ cat despedida.luaprint Dúvidas?duvidas = io.stdin:read*lif duvidas == s then print(Sim. Qual?)elseif duvidas == n then print(Até a próxima, pessoal!)end

×