Versão navegável: todo o material também está publicado como site em dionipadilha.github.io/aprendendo_lua — gerado por um script Lua deste próprio repositório.
Este repositório oferece guias para a linguagem de programação Lua, abrangendo diversos conceitos. O material aqui apresentado é fruto de meu estudo e desenvolvimento, e visa auxiliar programadores em diferentes níveis de experiência.
Novo por aqui? Comece pelo roteiro guiado de 3 dias:
documentacao/comece_aqui.md.
Este repositório tem como objetivo contribuir para a comunidade de programadores.
executar_testes.sh).As pastas na ordem de estudo sugerida (a mesma de documentacao/guia_de_estudos.md):
| Pasta | Tema |
|---|---|
basico/ |
Primeiros passos, tipos, cadeias de texto, operadores e formatação |
controle_de_fluxo/ |
Condicionais, laços, break, switch e goto |
funcoes/ |
Funções, clausuras, varargs, múltiplos retornos e memoização |
tabelas/ |
Tabelas, vetores, pilhas, listas, iteradores, buracos/#, cópias e serialização |
metatabelas/ |
Metatabelas, metamétodos, proxies e tabelas somente leitura |
poo/ |
Classes, herança, polimorfismo, mixins e interfaces |
modulos/ |
require, dofile, loadfile, ambientes (_ENV) e empacotamento com LuaRocks |
erros/ |
error, assert, pcall, xpcall e try/except |
io/ |
Leitura e escrita de arquivos, em texto e binário |
sistema/ |
Data e hora, relógio, esperas, aleatórios e linha de comando |
gc/ |
Coleta de lixo e tabelas fracas |
desempenho/ |
Medição de desempenho: cronometrar antes de otimizar |
depuracao/ |
Biblioteca debug: introspecção da pilha e ganchos de execução |
testes/ |
Framework de teste unitário e exemplos de testes |
padroes/ |
Padrões de projeto, da fábrica ao MVC e à máquina de estados |
solid/ |
Princípios SOLID, um arquivo por princípio |
corrotinas/ |
Guias e exemplos de corrotinas |
banco_de_dados/ |
Integração com SQLite via CLI |
capi/ |
API C: embutir Lua em C e módulos C carregáveis via require |
projetos/ |
Projetos completos (pluralizador, json, equipe) e soluções dos exercícios |
documentacao/ |
Guia de estudos, roteiro, paradigmas, convenções, guias de instalação, LuaJIT/versões e enunciados de projetos |
site/ |
Gerador do site estático em arquitetura hexagonal — estudo de caso de portas e adaptadores |
Esta tabela é espelho de site/trilha.lua — a fonte única, legível
por máquina, da ordem das pastas e das lições (o site e o verificador
site/verificar_trilha.lua a consomem; ao mudar uma, mude a outra).
A trilha completa de estudo está em documentacao/roteiro_de_estudos.yml e documentacao/guia_de_estudos.md.
Quatro exemplos que mostram o espírito do repositório — executáveis, autoverificados e honestos sobre limitações:
projetos/json/ — codificador e decodificador de JSON do zero, com testes de roundtrip e uma seção de limitações conhecidas que diz a verdade (null, Unicode, ciclos).corrotinas/jogo_com_corrotinas.lua — um mini-jogo de perseguição jogável no terminal que ensina a troca de valores entre resume e yield.solid/ — cada princípio SOLID com a violação e o redesenho lado a lado, no mesmo arquivo, verificados por asserts.tabelas/buracos_e_comprimento.lua — a pegadinha mais famosa de Lua (# com buracos) demonstrada em vez de apenas descrita.Todo o material — nomes de arquivos, identificadores, comentários e mensagens — está em pt-BR. Permanecem em inglês apenas o que pertence à própria linguagem (palavras-chave, biblioteca padrão como table.insert, metamétodos como __index) e termos técnicos consagrados (siglas como CRUD, MVC e SOLID). Identificadores não levam acento porque Lua só aceita ASCII em nomes (funcao, heranca).
Os exemplos têm como alvo o Lua 5.4. Cada arquivo é independente — execute a partir do diretório em que ele está:
lua5.4 basico/ola_mundo.lua
cd projetos/json && lua5.4 principal.lua
Para verificar todos os scripts de uma vez (o mesmo teste executado pela CI):
./executar_testes.sh
Os códigos disponibilizados neste repositório são livres para uso, sob a licença MIT. A citação da fonte é apreciada.
Contribuições são bem-vindas — as convenções e o passo a passo estão em
CONTRIBUTING.md.
Espero que este material seja útil para o meu/seu aprendizado!