a PUC-RJ + Petrobras. histórico usada no ambiente onde não existiam programadores profissionais, e sim pessoas de várias áreas para criar scripts. github.com/jhoonb
núcleo da linguagem é totalmente escrito e mantido pelo comitê composto por Waldemar, Roberto e Luiz. Não são aceitos patches e correções de terceiros, bugs podem ser reportados porém códigos são escritos exclusivamente pelo comitê. github.com/jhoonb
Languages (HOPL III), 3a Conferência da ACM sobre a História das Linguagens de Programação, tendo importância global. Essa conferência ocorre a cada 15 anos. Lua é a única linguagem criada fora do primeiro mundo com reconhecimento e importância mundial. github.com/jhoonb
Tipagem Forte (+-) • Coerção • Possui 22 palavras reservadas • Standard Library pequena, mas eficiente • 8 tipos de dados primitivos • todos os valores são first-class-value • única estrutura de dados (table) • Case sensitive • namespace (usando table) github.com/jhoonb
compila sem modificações em todas as plataformas que têm um compilador C padrão; • Embutível: API em C, simples e bem documentada + Meta-mecanismos; • Pequena e Livre: código-fonte + documentação: 297K comprimido e 1.2M descompactado. 24000 linhas de C; licença MIT; github.com/jhoonb
numérico string: cadeia de caracteres table: única estrutura de dados function: armazena funções thread: para implementar co-rotinas userdata: armazena dados oriundos de programas em C nil: valor indefinido boolean: valor booleano github.com/jhoonb
a + b end function soma(a, b) return a + b end soma(2, 3) --> 5 variável soma recebe uma função anônima com dois parâmetros, que retorna a soma deles. function github.com/jhoonb
a + b end function soma(a, b) return a + b end soma(2, 3) --> 5 Açúcar sintático* para escrever a mesma função *syntax sugar function github.com/jhoonb
a + b end function soma(a, b) return a + b end soma(2, 3) --> 5 Funções são Valores de Primeira Classe (First Class Value). E são anônimas. function github.com/jhoonb
a + b end sub = function(a, b) return a - b end soma_sub = function(f1, f2, a, b) return f1(a, b), f2(a, b) end a, b = soma_sub(soma, sub, 10, 15) function github.com/jhoonb
a + b end sub = function(a, b) return a - b end soma_sub = function(f1, f2, a, b) return f1(a, b), f2(a, b) end a, b = soma_sub(soma, sub, 10, 15) podemos passar funções como parâmetros function github.com/jhoonb
a + b end sub = function(a, b) return a - b end soma_sub = function(f1, f2, a, b) return f1(a, b), f2(a, b) end a, b = soma_sub(soma, sub, 10, 15) podemos passar funções como argumentos de funções function github.com/jhoonb
a + b end sub = function(a, b) return a - b end soma_sub = function(f1, f2, a, b) return f1(a, b), f2(a, b) end a, b = soma_sub(soma, sub, 10, 15) podemos chamar as funções function github.com/jhoonb
a + b end sub = function(a, b) return a - b end soma_sub = function(f1, f2, a, b) return f1(a, b), f2(a, b) end a, b = soma_sub(soma, sub, 10, 15) múltiplos retornos function github.com/jhoonb
a + b end sub = function(a, b) return a - b end soma_sub = function(f1, f2, a, b) return f1(a, b), f2(a, b) end a, b = soma_sub(soma, sub, 10, 15) múltiplos retornos passados paras as variáveis function github.com/jhoonb
= {10, 20, “Lua”} t[1] --> 10 t[3] --> “Lua” t = {a = 1, b = 2, c = ‘lua’} t[‘a’] --> 1 acessamos os valores da tabela através de índices table github.com/jhoonb
= {10, 20, “Lua”} t[1] --> 10 t[3] --> “Lua” t = {a = 1, b = 2, c = ‘lua’} t[‘a’] --> 1 índices em Lua começam em 1, não em 0 como em Python ou C table github.com/jhoonb
return a + b end t = {a = 1, b = {a = “Lua”}, f = soma} t.b.a --> “Lua” t[“b”][“a”] --> “Lua” t[“b”].a --> “Lua” t.b[“a”] --> “Lua” acessando a tabela dentro da tabela table github.com/jhoonb
return a + b end t = {a = 1, b = {a = “Lua”}, f = soma} t.f --> function: 0x559e12e985f0 t[“f”] --> function: 0x559e12e985f0 retorna a referência pra função table github.com/jhoonb
return a + b end t = {a = 1, b = {a = “Lua”}, f = soma} t.f(2,4) --> 6 t[“f”](2,4) → 6 para executar a função, chamamos com parênteses e passamos os parâmetros table github.com/jhoonb
variáveis Lua. Este tipo corresponde a um bloco de memória e não tem operações pré-definidas em Lua. Valores userdata não podem ser criados ou modificados em Lua, somente através da API C. ex.: type(io.input()) --> userdata Tipos Primitivos userdata github.com/jhoonb
--> false false and true --> false false and false --> false true or true --> true true or false --> true false or true --> true false or false --> false operador binário: and retorna true se os dos valores são true github.com/jhoonb
--> false false and true --> false false and false --> false true or true --> true true or false --> true false or true --> true false or false --> false operador binário: or retorna true se ao menos 1 dos valores é true github.com/jhoonb
Porque a condição nunca muda: x continua sendo 1 infinitamente, a não ser que você troque. Precisamos incrementar nossa variável da condição, explicitamente github.com/jhoonb
o bloco-de-código depois verifica a exp essa forma de loop a exp deve ser falsa para continuar executando, quando ela for verdadeira o loop é encerrado github.com/jhoonb
v) end no for genérico, usamos a keyword in e duas variáveis: i = será o índice da lista v = o valor ipairs() é uma função que pega uma tabela e retorna pares de índice-valor (i,v) de maneira iterável github.com/jhoonb
v) end no for genérico, usamos a keyword in e duas variáveis: i = será o índice da lista v = o valor ipairs() é uma função que pega uma tabela e retorna pares de índice-valor (i,v) de maneira iterável saída: 1 10 2 20 3 30 github.com/jhoonb
bibliotecas (funções) que estão disponíveis por padrão. A Biblioteca padrão de Lua é implementada diretamente por uma API em C, e é pequena, enxuta, porém, eficiente. github.com/jhoonb