Projetos
Mini projetos para aplicar o que foi aprendido de forma integrada.
Como usar
Seção intitulada “Como usar”- Leia o enunciado do projeto
- Planeje antes de codificar - defina módulos, structs, enums e fluxo
- Implemente incrementalmente, rodando
cargo checkcom frequência - Escreva testes com
cargo testpara as partes principais antes de avançar
Projeto 01 - Jogo de Adivinhação
Seção intitulada “Projeto 01 - Jogo de Adivinhação”Nível: iniciante
Objetivo: Construir um jogo interativo no terminal usando uma crate externa.
Descrição: O programa sorteia um número entre 1 e 100 e pede palpites até a pessoa acertar, dizendo se o palpite foi alto ou baixo. É o primeiro projeto do livro oficial do Rust - tente fazer sem olhar e compare depois.
Requisitos:
- Usa a crate
rand(adicionada comcargo add rand) para sortear o número - Lê a entrada com
std::io::stdin().read_line - Converte o palpite com
parsee ignora entradas inválidas sem encerrar o programa - Compara com
matchestd::cmp::Ordering - Mostra quantas tentativas foram necessárias
Exemplo de uso:
Adivinhe o número (1 a 100):50Muito alto!25Muito baixo!37Acertou em 3 tentativas!Projeto 02 - Lista de Tarefas (CLI)
Seção intitulada “Projeto 02 - Lista de Tarefas (CLI)”Nível: intermediário
Objetivo: Criar uma ferramenta de linha de comando que persiste dados em arquivo.
Descrição: Construa um gerenciador de tarefas que recebe subcomandos pela linha de comando e salva as tarefas em um arquivo JSON.
Requisitos:
- Subcomandos
add,list,doneeremove, definidos com a crateclap - Tarefas representadas por uma
structcomid,tituloeconcluida - Persistência em
tarefas.jsoncomserdeeserde_json - Erros propagados com o operador
?e exibidos com mensagens claras - Nenhum
unwrap()em operações de arquivo
Exemplo de uso:
$ tarefas add "Estudar ownership"Tarefa 1 adicionada.
$ tarefas list[ ] 1 - Estudar ownership
$ tarefas done 1Tarefa 1 concluída.Projeto 03 - mini grep
Seção intitulada “Projeto 03 - mini grep”Nível: intermediário
Objetivo: Reproduzir uma versão simples do grep, organizando o código em biblioteca e binário.
Descrição: O programa recebe um termo de busca e o caminho de um arquivo e imprime as linhas que contêm o termo.
Requisitos:
- Lógica de busca em
src/lib.rse leitura de argumentos emsrc/main.rs - Função
buscar<'a>(termo: &str, conteudo: &'a str) -> Vec<&'a str>com lifetime explícito - Opção de busca sem diferenciar maiúsculas de minúsculas via variável de ambiente
- Mensagens de erro enviadas para
stderrcomeprintln! - Testes unitários da função de busca
Exemplo de entregável:
$ minigrep caramelo poema.txto caramelo dormiu ao sole o caramelo sonhou com ossosProjeto 04 - API REST de Livros
Seção intitulada “Projeto 04 - API REST de Livros”Nível: avançado
Objetivo: Construir uma API HTTP assíncrona.
Descrição: Crie uma API que permite cadastrar, listar, buscar e remover livros, guardando os dados em memória.
Requisitos:
- Servidor com
axumsobre o runtimetokio - Rotas
GET /livros,GET /livros/{id},POST /livroseDELETE /livros/{id} - Entrada e saída em JSON com
serde - Estado compartilhado com
Arc<Mutex<...>>(ouRwLock) - Códigos de status corretos (
200,201,204,400,404) - Testes de integração das rotas
Exemplo de entregável:
$ curl -X POST localhost:3000/livros -H 'Content-Type: application/json' \ -d '{"titulo":"A Linguagem Rust","autor":"Klabnik e Nichols"}'{"id":1,"titulo":"A Linguagem Rust","autor":"Klabnik e Nichols"}