Learn in 10 minutes

Learn in 10 minutes

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! 🚀