LINGUAGEM
LUA
Por João Gabriel e Emanuel Franklyn
IFPB | 2024
1
SUMÁRIO
Definindo Lua Jogos feitos em Lua Empresas que usam Lua
Sintaxe Lógica de programação Conceitos
Exemplos Aplicações práticas
IFPB | 2024
2
O QUE É LUA?
A linguagem Lua foi criada como ferramenta de
extensão, mas destacou-se pela eficiência e
fácil integração, tornando-se uma das poucas
linguagens fora do eixo Europa/EUA/Japão
amplamente usadas, como R, Dart e Elixir
(também brasileira).
IFPB | 2024
3
JOGOS QUE UTILIZAM LUA
IFPB | 2024
4
EMPRESAS QUE USAM LUA
IFPB | 2024
5
IFPB | 2024
6
TIPOS DE VARIÁVEIS
nil, Representa a ausência de valor ou um valor indefinido;
boolean, Representa valores lógicos: true ou false;
number, Representa números, incluindo decimais;
string, Representa sequências de caracteres;
userdata; Representa arquivos importados que não são .lua;
function; Representa uma função;
thread; Representa uma corrotina (cooperative thread);
table; Representa arrays, mapas (dicionários), objetos, etc...
IFPB | 2024
7
OPERADORES RELACIONAIS
< Menor que; > Maior que;
<= Menor ou igual; >= Maior ou igual
== Igual; ~= Diferente
IFPB | 2024
8
OPERADORES LÓGICOS
and - “e”
(caso eu precise satisfazer mais de uma condição)
or - “ou”
(se eu precisar satisfazer somente uma das condições)
not - “não”
(caso eu precise não satisfazer a condição)
IFPB | 2024
9
INTRODUÇÃO À LUA
-- Nosso primeiro programa em Lua:
print("Olá, Mundo!")
-- O comando print() exibe mensagens no terminal.
-- Comentários começam com dois traços (--).
-- Teste você mesmo: O que acontece se você mudar "Olá,
Mundo!" para outra frase?
IFPB | 2024
10
VARIÁVEIS
-- Variáveis guardam valores e podem ser alteradas.
nome = "Jarbinha"
idade = 33
-- Exibindo os valores:
print("Nome: ", nome)
print("Idade: ", idade)
-- Lua não exige declaração explícita de tipos (não é fortemente tipada).
-- Ela infere o tipo da variável automaticamente (por debaixo dos panos).
-- Teste você mesmo: Atribua um número decimal a 'idade'. O que acontece?
IFPB | 2024
11
INPUTS
-- Inputs permitem capturar dados do usuário durante a execução.
print("Digite seu nome: ")
nome = [Link]()
print("Digite sua idade:")
idade = [Link]("*n") -- '*n' lê números.
-- Exibindo os dados recebidos:
print("Olá, " .. nome .. "! Você tem " .. idade .. " anos.")
-- Teste você mesmo: O que acontece se o usuário digitar texto ao invés de um número
para idade?
IFPB | 2024
12
ESTRUTURAS CONDICIONAIS
-- Estruturas condicionais determinam o fluxo do programa com base em condições.
idade = 20
if idade >= 18 then
print("Você é maior de idade.")
else
print("Você é menor de idade.")
end
-- Leia-se:
-- "Se idade maior ou igual a dezoito, imprima 'Você é maior de idade'."
-- "Senão, imprima 'Você é menor de idade'."
-- Teste você mesmo: E se a variável idade for exatamente 18? O que será exibido?
IFPB | 2024
13
LAÇOS DE REPETIÇÃO
-- Laços automatizam a execução repetitiva de tarefas.
i=1
while i <= 5 do for i = 1, 5, 1 do
print("Contador: ", i) print("Iteração: ", i)
i=i+1 end
end
-- For é usado para contagens. While executa enquanto a condição é verdadeira.
-- Teste você mesmo: Modifique o limite superior do 'for' para 10. Quantas
vezes ele iterará?
IFPB | 2024
14
FUNÇÕES
-- Funções otimizam a execução do código e evitam repetições.
function cumprimentar(nome)
print("Olá, " .. nome .. "!")
end
cumprimentar("Bebel")
-- Funções começam com 'function', o nome dela, os parâmetros e terminam com
'end'.
-- O operador '..' concatena strings.
-- Teste você mesmo: O que acontece se você chamar 'cumprimentar' sem passar um
nome? IFPB | 2024
15
TABLES
-- Tables são usadas para armazenar dados, como arrays, listas e objetos.
pessoa = {
nome = "Bebel",
idade = 25
}
-- Acessando valores:
print([Link])
print([Link])
-- Tables podem ser usadas para representar arrays ou objetos.
-- Teste você mesmo: Adicione o campo 'cidade' à tabela e imprima-o. Exemplo: [Link]
= "Recife".
IFPB | 2024
16
METATABLES
-- Metatables permitem modificar o comportamento de tabelas em Lua.
pessoa = { nome = "Carlos" }
-- Definindo uma metatable com um método
metatable = {
saudacao = function(self)
return "Olá, " .. [Link]
end
}
-- Associando a metatable à pessoa
setmetatable(pessoa, {__index=metatable})
-- Chamando o método
print(pessoa:saudacao()) -- "Olá, Carlos"
IFPB | 2024
17
TRATANDO ERROS
-- Em Lua, podemos capturar erros com a função pcall (protected call).
local status, err = pcall(function()
-- Aqui você pode colocar código que pode gerar erro
error("Este é um erro de teste.")
end)
if not status then
print("Erro capturado: " .. err)
else
print("Código executado com sucesso!")
end
-- Teste você mesmo: Remova a clausula error() e substitua por código que deveria gerar um erro
IFPB | 2024
18
BOTS DO DISCORD
-- Como criar um bot no Discord com Lua:
local discordia = require('discordia') -- Biblioteca para bots no Discord usando Luvit.
local client = [Link]() -- Iniciando o bot.
client:on('ready', function()
print('Logged in as ' .. [Link]) -- Exibe quando o bot está ativo.
end)
client:on('messageCreate', function(message)
if [Link] == '!ping' then -- Se o usuário digitar '!ping', responda 'Pong!'.
[Link]:send('Pong!')
elseif [Link] == '!olamundo' then -- Se o usuário digitar '!olamundo', responda 'Olá, Mundo!'.
[Link]:send('Olá, Mundo!') end end)
client:run('Bot INSERT_TOKEN_HERE') -- Insira o token do seu bot.
-- Teste você mesmo: O que acontece se você adicionar mais condições ao bot para responder outros comandos?
IFPB | 2024
19
RECOMENDAÇÕES DE ESTUDO
LOVE2D
Um framework para criação de jogos 2D em Lua. Open-source e funciona
em Windows, Linux, macOS, Android e iOS.
Fuzzy framework
Usado pra tratar de datasets, uma ferramenta escrita em lua que se
comunica bem com C e C++.
IFPB | 2024
EXTRAS - COMANDO DE DADO
client:on('messageCreate', function(message)
if [Link] == '!1d20' then
local number = [Link](20)
[Link]:send(tostring(number))
end
end)
IFPB | 2024
EXTRAS - JOKENPÔ
local escolhas = {"Pedra", "Papel", "Tesoura"}
local c = escolhas[[Link](1, 3)]
[Link]("Escolha Pedra, Papel ou Tesoura: ")
local u = [Link]()
if u == c then
print("Empate! Ambos escolheram " .. c)
elseif (u == "Pedra" and c == "Tesoura") or
(u == "Tesoura" and c == "Papel") or
(u == "Papel" and c == "Pedra") then
print("Você ganhou! " .. u .. " vence " .. c)
else
print("Você perdeu! " .. c .. " vence " .. u)
end
IFPB | 2024
EXTRAS - 21 OU ESTOURO
[Link]([Link]())
local total = 0
while total < 21 do
local carta = [Link](1, 10)
print("Você comprou: " .. carta)
total = total + carta
print("Total: " .. total)
if total < 21 then
[Link]("Deseja continuar? (s/n): ")
if [Link]() ~= "s" then break end
end
end
if total == 21 then
print("Parabéns! Você fez 21!")
elseif total > 21 then
print("Você estourou com " .. total .. "!")
else
print("Você parou com " .. total .. ".")
end
IFPB | 2024
EXTRAS - JOGO DO “ARROCHADO”
[Link]([Link]())
local n, li, ls = [Link](1, 100), 1, 100
print("Jogo do Arrochado! Acerte os limites sem acertar o número.")
while true do
print("Limites: [" .. li .. ", " .. ls .. "]")
[Link]("Digite um número: ")
local c = tonumber([Link]())
if not c or c <= li or c >= ls then
print("Inválido! Tente entre os limites.\n")
elseif c == n then
print("Você perdeu! O número era " .. n)
break
else
if c < n then li = c else ls = c end
if ls - li == 2 then
print("Você ganhou! Arrochou o número " .. n)
break end end end
IFPB | 2024
EXTRAS - PAR OU ÍMPAR
[Link]([Link]())
local pc = [Link](1, 10)
[Link]("Escolha Par ou Ímpar (P/I): ")
local escolha = [Link]()
[Link]("Escolha um número (1-10): ")
local num = tonumber([Link]())
local soma = pc + num
print("Computador escolheu: " .. pc .. ", Soma: " .. soma)
if (soma % 2 == 0 and escolha == "P") or (soma % 2 ~= 0 and escolha == "I") then
print("Você ganhou!")
else
print("Você perdeu!")
end
IFPB | 2024
IFPB | 2024
OBRIGADO!
Apresentado por João Gabriel e Emanuel Franklyn