Aprenda Lua em 10 minutos
Eu sou Lua - uma linguagem de programação superleve, perfeita para embutir em outras aplicações. Sabia que sou usada em jogos como ‘World of Warcraft’ e Roblox? Também sou popular para scripts de configuração!
1. Seu primeiro programa em Lua
Vamos começar pelo básico. Crie um arquivo hello.lua
e escreva:
print("Hello, World!")
Salve e execute no terminal:
lua hello.lua
Você verá:
Hello, World!
Viu como é fácil! print()
mostra texto na tela.
2. Sintaxe básica
Minha sintaxe é super simples:
-- Isso é um comentário de uma linha
print("Olá Mundo!")
--[[
Isso é um comentário
de múltiplas linhas
]]
Pontos importantes:
- Comentários: Uma linha
--
, múltiplas--[[ ]]
- Declarações: Uma por linha, sem ponto e vírgula
- Maiúsculas: Eu diferencio maiúsculas de minúsculas
- Espaços: Espaços e quebras de linha não importam
3. Variáveis e tipos de dados
Eu sou de tipagem dinâmica, não precisa declarar tipos:
-- Atribuição direta
nome = "Lua"
idade = 25
incrivel = true
pi = 3.14159
-- Atribuição múltipla
x, y, z = 10, 20, 30
-- Valor nulo é nil
vazio = nil
print("Nome:", nome)
print("Idade:", idade)
print("Incrível?:", incrivel)
Meus tipos de dados:
- nil: Sem valor
- boolean: true ou false
- number: Números (inteiros e decimais)
- string: Texto
- table: Minha estrutura de dados universal
- function: Funções (cidadãos de primeira classe)
- userdata: Para C
- thread: Corrotinas
4. Manipulação de strings
-- Criar strings
str1 = "Olá"
str2 = 'Mundo'
str3 = [[Multilinha
texto fácil]]
-- Concatenar com ..
mensagem = str1 .. " " .. str2
print(mensagem) -- Saída: Olá Mundo
-- Comprimento com #
comprimento = #"Olá"
print(comprimento) -- Saída: 3
-- Métodos de string
texto = "hello world"
maiusculas = texto:upper()
minusculas = texto:lower()
substring = texto:sub(1, 5)
print(maiusculas) -- Saída: HELLO WORLD
print(substring) -- Saída: hello
5. Tabelas - Meu contêiner universal
Tabelas são o meu melhor recurso:
-- Como array (índices começam em 1)
frutas = {"maçã", "banana", "cereja"}
print(frutas[1]) -- Saída: maçã
print(frutas[2]) -- Saída: banana
-- Como dicionário
pessoa = {
nome = "João",
idade = 30,
cidade = "São Paulo"
}
print(pessoa.nome) -- Saída: João
print(pessoa["idade"]) -- Saída: 30
-- Misturado também funciona
tabelaMista = {
"maçã",
"banana",
cor = "vermelho",
quantidade = 5
}
-- Operações com tabelas
frutas = {"maçã", "banana"}
table.insert(frutas, "cereja") -- Adicionar ao final
table.insert(frutas, 2, "laranja") -- Inserir na posição
print(table.concat(frutas, ", ")) -- Saída: maçã, laranja, banana, cereja
6. Estruturas de controle
-- If
idade = 18
if idade >= 18 then
print("Você é adulto")
elseif idade >= 13 then
print("Você é adolescente")
else
print("Você é criança")
end
-- While
contador = 1
while contador <= 5 do
print("Contador:", contador)
contador = contador + 1
end
-- For numérico
for i = 1, 5 do
print("Número:", i)
end
-- For com passo
for i = 10, 1, -2 do
print("Contagem regressiva:", i)
end
-- For para tabelas
frutas = {"maçã", "banana", "cereja"}
for indice, fruta in ipairs(frutas) do
print(indice, fruta)
end
pessoa = {nome = "João", idade = 30}
for chave, valor in pairs(pessoa) do
print(chave, valor)
end
7. Funções
-- Função básica
function saudar(nome)
return "Olá, " .. nome .. "!"
end
mensagem = saudar("Maria")
print(mensagem) -- Saída: Olá, Maria!
-- Múltiplos retornos
function calcular(a, b)
return a + b, a - b, a * b, a / b
end
soma, subtracao, multiplicacao, divisao = calcular(10, 5)
print("Soma:", soma) -- Saída: Soma: 15
print("Subtração:", subtracao) -- Saída: Subtração: 5
-- Função anônima (lambda)
multiplicar = function(x, y)
return x * y
end
resultado = multiplicar(4, 5)
print(resultado) -- Saída: 20
-- Funções como parâmetros
function executarOperacao(x, y, operacao)
return operacao(x, y)
end
resultado = executarOperacao(6, 7, multiplicar)
print(resultado) -- Saída: 42
8. Módulos
Organize o código em módulos. Crie matematicas.lua
:
-- matematicas.lua
local Matematicas = {}
function Matematicas.somar(a, b)
return a + b
end
function Matematicas.multiplicar(a, b)
return a * b
end
return Matematicas
Use no arquivo principal:
-- principal.lua
local matematicas = require("matematicas")
resultado = matematicas.somar(10, 5)
print("Resultado soma:", resultado) -- Saída: Resultado soma: 15
resultado = matematicas.multiplicar(4, 6)
print("Resultado multiplicação:", resultado) -- Saída: Resultado multiplicação: 24
9. Tratamento de erros
-- Capturar erros com pcall
function operacaoPerigosa()
error("Algo deu errado!")
end
-- pcall chama de forma protegida
sucesso, resultado = pcall(operacaoPerigosa)
if sucesso then
print("Sucesso:", resultado)
else
print("Falha:", resultado)
end
-- Erros personalizados
function dividir(a, b)
if b == 0 then
error("Divisão por zero não permitida")
end
return a / b
end
sucesso, resultado = pcall(dividir, 10, 0)
if not sucesso then
print("Erro:", resultado)
end
10. Exemplos práticos
-- Calculadora simples
function calculadora()
print("🐮 Calculadora Simples")
print("1. Somar")
print("2. Subtrair")
print("3. Multiplicar")
print("4. Dividir")
opcao = tonumber(io.read())
print("Primeiro número:")
num1 = tonumber(io.read())
print("Segundo número:")
num2 = tonumber(io.read())
if opcao == 1 then
resultado = num1 + num2
print("Resultado:", resultado)
elseif opcao == 2 then
resultado = num1 - num2
print("Resultado:", resultado)
elseif opcao == 3 then
resultado = num1 * num2
print("Resultado:", resultado)
elseif opcao == 4 then
if num2 ~= 0 then
resultado = num1 / num2
print("Resultado:", resultado)
else
print("❌ Divisão por zero")
end
else
print("🤔 Opção inválida")
end
end
-- Para usar, remova o comentário
-- calculadora()
-- Operações de arquivo
function lerArquivo(nomeArquivo)
local arquivo = io.open(nomeArquivo, "r")
if not arquivo then
return nil, "Não foi possível abrir o arquivo"
end
local conteudo = arquivo:read("*a")
arquivo:close()
return conteudo
end
conteudo, erro = lerArquivo("exemplo.txt")
if conteudo then
print("Conteúdo:", conteudo)
else
print("Erro:", erro)
end
Conclusão
Eu Lua sou incrível! Perfeita para:
- 🎮 Scripting de jogos (muitos jogos me usam)
- 🔧 Desenvolvimento embarcado (por ser leve)
- ⚙️ Arquivos de configuração e automação
- 🚀 Cenários de alto desempenho (com LuaJIT)
O melhor de mim:
- Superleve: Ocupo pouco espaço
- Rápida: LuaJIT é ultra rápido
- Flexível: Tipagem dinâmica + tabelas universales
- Portátil: Funciono em móveis e servidores
- Fácil de embutir: Me dou bem com C/C++
Quer aprender mais? Tente:
- Biblioteca padrão do Lua
- Corrotinas (programação concorrente)
- Metatables e metamethods (para OOP)
- API C do Lua
- Love2D para desenvolvimento de jogos
Eu Lua sou fácil de aprender e muito poderosa! 🚀