SlideShare uma empresa Scribd logo
1 de 18
Lua – O simples é tudo
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.
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
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.
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
Por que Lua?

 Livre
   Código aberto distribuído na licença MIT. Pode ser
    usada    para    qualquer     propósito,  inclusive
    comerciais.
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
Talk is cheap...SHOW ME THE
            CODE!
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
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;
}
Pode isso, Arnaldo!?




Afinal, que raio de tabela mágica é essa!?
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.
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,
   }
}
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
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
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.
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
$ 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

Mais conteúdo relacionado

Mais procurados

Matlab – curso básico (1)
Matlab – curso básico (1)Matlab – curso básico (1)
Matlab – curso básico (1)Felipe Meganha
 
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
 
Iteraveis e geradores em Python
Iteraveis e geradores em PythonIteraveis e geradores em Python
Iteraveis e geradores em PythonLuciano Ramalho
 
Vetores, Matrizes e Strings em C Parte 3
Vetores, Matrizes e Strings em C Parte 3Vetores, Matrizes e Strings em C Parte 3
Vetores, Matrizes e Strings em C Parte 3Elaine Cecília Gatto
 
Introdução a programação
Introdução a programaçãoIntrodução a programação
Introdução a programaçãoGustavo Nazário
 
Otimizações em Sistemas de Armazenamento mediadas por anotações em Metadados
Otimizações em Sistemas de Armazenamento mediadas por anotações em MetadadosOtimizações em Sistemas de Armazenamento mediadas por anotações em Metadados
Otimizações em Sistemas de Armazenamento mediadas por anotações em Metadadosricardoas
 
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
 
Python Funcional
Python FuncionalPython Funcional
Python Funcionalpugpe
 
Python: Iteraveis, geradores etc
Python: Iteraveis, geradores etcPython: Iteraveis, geradores etc
Python: Iteraveis, geradores etcLuciano Ramalho
 
Palestra python
Palestra pythonPalestra python
Palestra pythonRony Cruch
 

Mais procurados (19)

Matlab – curso básico (1)
Matlab – curso básico (1)Matlab – curso básico (1)
Matlab – curso básico (1)
 
Estrutura de dados - Pilhas
Estrutura de dados - PilhasEstrutura de dados - Pilhas
Estrutura de dados - Pilhas
 
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
 
Estrutura de dados em Java - Filas
Estrutura de dados em Java - Filas Estrutura de dados em Java - Filas
Estrutura de dados em Java - Filas
 
Pilha em C
Pilha em CPilha em C
Pilha em C
 
Iteraveis e geradores em Python
Iteraveis e geradores em PythonIteraveis e geradores em Python
Iteraveis e geradores em Python
 
Estrutura de dados em Java - Pilhas
Estrutura de dados em Java - PilhasEstrutura de dados em Java - Pilhas
Estrutura de dados em Java - Pilhas
 
Vetores, Matrizes e Strings em C Parte 3
Vetores, Matrizes e Strings em C Parte 3Vetores, Matrizes e Strings em C Parte 3
Vetores, Matrizes e Strings em C Parte 3
 
Introdução a programação
Introdução a programaçãoIntrodução a programação
Introdução a programação
 
Otimizações em Sistemas de Armazenamento mediadas por anotações em Metadados
Otimizações em Sistemas de Armazenamento mediadas por anotações em MetadadosOtimizações em Sistemas de Armazenamento mediadas por anotações em Metadados
Otimizações em Sistemas de Armazenamento mediadas por anotações em Metadados
 
Estrutura de dados - Filas
Estrutura de dados - FilasEstrutura de dados - Filas
Estrutura de dados - Filas
 
Linguagem R
Linguagem RLinguagem R
Linguagem R
 
Estruturas
EstruturasEstruturas
Estruturas
 
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
 
Pilha e Fila Dinamica
Pilha e Fila DinamicaPilha e Fila Dinamica
Pilha e Fila Dinamica
 
Pilha e Fila Estática
Pilha e Fila EstáticaPilha e Fila Estática
Pilha e Fila Estática
 
Python Funcional
Python FuncionalPython Funcional
Python Funcional
 
Python: Iteraveis, geradores etc
Python: Iteraveis, geradores etcPython: Iteraveis, geradores etc
Python: Iteraveis, geradores etc
 
Palestra python
Palestra pythonPalestra python
Palestra python
 

Destaque

Palestra: Desafios do desenvolvedor no mercado de trabalho
Palestra: Desafios do desenvolvedor no mercado de trabalhoPalestra: Desafios do desenvolvedor no mercado de trabalho
Palestra: Desafios do desenvolvedor no mercado de trabalhoJanynne Gomes
 
Logica programar
Logica programarLogica programar
Logica programarManawydan
 
Linguagem de programação darwin
Linguagem de programação darwinLinguagem de programação darwin
Linguagem de programação darwindiokavalan
 
A Evolução de Lua (Pycon Brasil 2008)
A Evolução de Lua (Pycon Brasil  2008)A Evolução de Lua (Pycon Brasil  2008)
A Evolução de Lua (Pycon Brasil 2008)guest55e576
 
Curso de programação para iniciantes: Qual linguagem de programação escolher?
Curso de programação para iniciantes: Qual linguagem de programação escolher?Curso de programação para iniciantes: Qual linguagem de programação escolher?
Curso de programação para iniciantes: Qual linguagem de programação escolher?Harlley Oliveira
 

Destaque (8)

Palestra: Desafios do desenvolvedor no mercado de trabalho
Palestra: Desafios do desenvolvedor no mercado de trabalhoPalestra: Desafios do desenvolvedor no mercado de trabalho
Palestra: Desafios do desenvolvedor no mercado de trabalho
 
Logica programar
Logica programarLogica programar
Logica programar
 
Linguagem de programação darwin
Linguagem de programação darwinLinguagem de programação darwin
Linguagem de programação darwin
 
A Evolução de Lua (Pycon Brasil 2008)
A Evolução de Lua (Pycon Brasil  2008)A Evolução de Lua (Pycon Brasil  2008)
A Evolução de Lua (Pycon Brasil 2008)
 
Lógica de Programação
Lógica de ProgramaçãoLógica de Programação
Lógica de Programação
 
Curso de programação para iniciantes: Qual linguagem de programação escolher?
Curso de programação para iniciantes: Qual linguagem de programação escolher?Curso de programação para iniciantes: Qual linguagem de programação escolher?
Curso de programação para iniciantes: Qual linguagem de programação escolher?
 
Seminário: Lua
Seminário: LuaSeminário: Lua
Seminário: Lua
 
Slideshare
SlideshareSlideshare
Slideshare
 

Semelhante a Lua – O simples é tudo

Curso Corona SDK - Módulo 2
Curso Corona SDK - Módulo 2Curso Corona SDK - Módulo 2
Curso Corona SDK - Módulo 2Luiz Duarte
 
Jogos_Eletronicos_Aula_03_Introducao_Linguagem_Lua_2014.pdf
Jogos_Eletronicos_Aula_03_Introducao_Linguagem_Lua_2014.pdfJogos_Eletronicos_Aula_03_Introducao_Linguagem_Lua_2014.pdf
Jogos_Eletronicos_Aula_03_Introducao_Linguagem_Lua_2014.pdfPauloGomes623362
 
Python e django na prática
Python e django na práticaPython e django na prática
Python e django na práticaRafael Cassau
 
Lógica de programação pascal
Lógica de programação   pascalLógica de programação   pascal
Lógica de programação pascalJocelma Rios
 
Aula5 introducao c
Aula5 introducao cAula5 introducao c
Aula5 introducao cprofwtelles
 
Escrevendo modulos python com rust
Escrevendo modulos python com rustEscrevendo modulos python com rust
Escrevendo modulos python com rustBruno Rocha
 
Python No Terra (2006-12-21)
Python No Terra  (2006-12-21)Python No Terra  (2006-12-21)
Python No Terra (2006-12-21)Rudá Moura
 
Paradigmas de Linguagens de programacao - Aula #2
Paradigmas de Linguagens de programacao - Aula #2Paradigmas de Linguagens de programacao - Aula #2
Paradigmas de Linguagens de programacao - Aula #2Ismar Silveira
 
Computação Científica com SciPy - Brevíssimo Tutorial
Computação Científica com SciPy - Brevíssimo TutorialComputação Científica com SciPy - Brevíssimo Tutorial
Computação Científica com SciPy - Brevíssimo TutorialFabio Spanhol
 
Cartilha de R para Estatística e Data Science.pdf
Cartilha de R para Estatística e Data Science.pdfCartilha de R para Estatística e Data Science.pdf
Cartilha de R para Estatística e Data Science.pdfEdkallenn Lima
 
Apostila de-introdução-à-linguagem-c
Apostila de-introdução-à-linguagem-cApostila de-introdução-à-linguagem-c
Apostila de-introdução-à-linguagem-cMaicon Rodrigues
 
Cherrypy - um framework para desenvolvimento rápido de aplicações web
Cherrypy - um framework para desenvolvimento rápido de aplicações webCherrypy - um framework para desenvolvimento rápido de aplicações web
Cherrypy - um framework para desenvolvimento rápido de aplicações webAlvaro Oliveira
 
Introdução a Linguagem C
Introdução a Linguagem CIntrodução a Linguagem C
Introdução a Linguagem CVê Rodrigues
 
Curso Completo de Linguagem de Programação C
Curso Completo de Linguagem de Programação CCurso Completo de Linguagem de Programação C
Curso Completo de Linguagem de Programação CJoberthSilva
 
Apostila linguagem c
Apostila linguagem cApostila linguagem c
Apostila linguagem corvel
 

Semelhante a Lua – O simples é tudo (20)

Curso Corona SDK - Módulo 2
Curso Corona SDK - Módulo 2Curso Corona SDK - Módulo 2
Curso Corona SDK - Módulo 2
 
Jogos_Eletronicos_Aula_03_Introducao_Linguagem_Lua_2014.pdf
Jogos_Eletronicos_Aula_03_Introducao_Linguagem_Lua_2014.pdfJogos_Eletronicos_Aula_03_Introducao_Linguagem_Lua_2014.pdf
Jogos_Eletronicos_Aula_03_Introducao_Linguagem_Lua_2014.pdf
 
Python e django na prática
Python e django na práticaPython e django na prática
Python e django na prática
 
Lógica de programação pascal
Lógica de programação   pascalLógica de programação   pascal
Lógica de programação pascal
 
Aula python
Aula pythonAula python
Aula python
 
Aula5 introducao c
Aula5 introducao cAula5 introducao c
Aula5 introducao c
 
Aula5 introducao c
Aula5 introducao cAula5 introducao c
Aula5 introducao c
 
Ud2
Ud2Ud2
Ud2
 
Escrevendo modulos python com rust
Escrevendo modulos python com rustEscrevendo modulos python com rust
Escrevendo modulos python com rust
 
Python No Terra (2006-12-21)
Python No Terra  (2006-12-21)Python No Terra  (2006-12-21)
Python No Terra (2006-12-21)
 
Paradigmas de Linguagens de programacao - Aula #2
Paradigmas de Linguagens de programacao - Aula #2Paradigmas de Linguagens de programacao - Aula #2
Paradigmas de Linguagens de programacao - Aula #2
 
Computação Científica com SciPy - Brevíssimo Tutorial
Computação Científica com SciPy - Brevíssimo TutorialComputação Científica com SciPy - Brevíssimo Tutorial
Computação Científica com SciPy - Brevíssimo Tutorial
 
Cartilha de R para Estatística e Data Science.pdf
Cartilha de R para Estatística e Data Science.pdfCartilha de R para Estatística e Data Science.pdf
Cartilha de R para Estatística e Data Science.pdf
 
Haskell - Introdução
Haskell - IntroduçãoHaskell - Introdução
Haskell - Introdução
 
Apostila de-introdução-à-linguagem-c
Apostila de-introdução-à-linguagem-cApostila de-introdução-à-linguagem-c
Apostila de-introdução-à-linguagem-c
 
Cherrypy - um framework para desenvolvimento rápido de aplicações web
Cherrypy - um framework para desenvolvimento rápido de aplicações webCherrypy - um framework para desenvolvimento rápido de aplicações web
Cherrypy - um framework para desenvolvimento rápido de aplicações web
 
Introdução a Linguagem C
Introdução a Linguagem CIntrodução a Linguagem C
Introdução a Linguagem C
 
Linguagem C clecioamerico
Linguagem C clecioamericoLinguagem C clecioamerico
Linguagem C clecioamerico
 
Curso Completo de Linguagem de Programação C
Curso Completo de Linguagem de Programação CCurso Completo de Linguagem de Programação C
Curso Completo de Linguagem de Programação C
 
Apostila linguagem c
Apostila linguagem cApostila linguagem c
Apostila linguagem c
 

Lua – O simples é tudo

  • 1. Lua – O simples é tudo
  • 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
  • 8. Talk is cheap...SHOW ME THE CODE!
  • 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; }
  • 11. Pode isso, Arnaldo!? Afinal, que raio de tabela mágica é essa!?
  • 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