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. 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. 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. 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. Por que Lua?
Livre
Código aberto distribuído na licença MIT. Pode ser
usada para qualquer propósito, inclusive
comerciais.
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
9. Interface com C – A
extensabilidade de Lua
Escrevendo o script em Lua...
--script.lua
io.write("A tabela recebida pelo script foi: n");
x=0
for i = 1, #foo do
print(i, foo[i])
x = x + foo[i]
end
io.write("Retornando dados para o C...n");
return x
10. Interface com C – A
extensabilidade de Lua
Escrevendo o código em C e invocando o script em Lua
#include <lua.h>
#include <lauxlib.h>
#include <stdlib.h>
#include <stdio.h>
int
main(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;
}
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. Um pouquinho mais de tabela...
local t = {} -- cria nova tabela
t[1] = 4 -- armazena 4 no índice 1
t[2] = "alo" -- armazena "alo" no índice 2
t["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. Conceitos básicos de Lua
Variáveis e Tipos
Lua 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. Conceitos básicos de Lua
Variáveis e Tipos
Toda 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. Conceitos básicos de Lua
Funções
Funçõ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. 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. $ cat despedida.lua
print 'Dúvidas?'
duvidas = io.stdin:read'*l'
if duvidas == 's' then
print('Sim. Qual?')
elseif duvidas == 'n' then
print('Até a próxima, pessoal!')
end