No description
- Rust 100%
| .woodpecker | ||
| src | ||
| tests | ||
| .gitignore | ||
| Cargo.lock | ||
| Cargo.toml | ||
| LICENSE | ||
| README.md | ||
Lição 56: Certificação Final (Comprehensive Review, Capstone Project)
1. Narrativa
A jornada do piloto pela Academia Æther chega ao momento decisivo — a Certificação Final. Este é o teste integrador que avalia tudo: ownership, traits, iterators, tratamento de erros e modelagem com enums. Cada desafio combina múltiplos conhecimentos em um sistema coeso. Apenas os pilotos certificados estão prontos para o campo de batalha real. Que o Borrow Checker esteja com você.
2. Conceito
A certificação final integra todos os conceitos do curso em um sistema unificado:
- Ownership & Borrowing: Gerenciamento correto de dados dos candidatos
- Traits & Generics: Comparações e ordenações via
Ord,PartialEq - Iterators: Processamento de resultados com
map,filter,fold - Error Handling: Result/Option para notas e aprovações
- Enums: Modelagem de status, áreas e níveis de certificação
3. Requisitos
- Modelar candidatos, provas e certificações
- Implementar cálculos de pontuação e percentual
- Determinar status de certificação por regras
- Classificar e filtrar candidatos
- Gerar relatórios finais de desempenho
4. Design de Dados
graph LR
A[CandidatoPiloto] --> B[Vec de ResultadoProva]
B --> C[calcular_pontuacao_total]
A --> D[calcular_percentual]
D --> E[determinar_certificacao]
E --> F[StatusCertificacao]
A --> G[gerar_relatorio]
G --> H[RelatorioCertificacao]
5. Diagrama de Fluxo
flowchart TD
A[Candidato] --> B[Para cada Área]
B --> C[Pontuação >= 60%?]
C -->|Não| D[Reprovado na Área]
C -->|Sim| E[Aprovado na Área]
D --> F{Mais áreas?}
E --> F
F -->|Sim| B
F -->|Não| G{Áreas reprovadas?}
G -->|Sim| H[Recusado]
G -->|Não| I[Calcular Percentual]
I --> J{Percentual?}
J -->|< 70%| K[Cadete]
J -->|< 85%| L[Piloto]
J -->|< 95%| M[PilotoSenior]
J -->|>= 95% + 10 missões| N[Comandante]
J -->|>= 95% sem missões| M
6. Funções
| Função | Descrição |
|---|---|
criar_candidato |
Cria novo candidato vazio |
adicionar_resultado |
Registra resultado de prova |
calcular_pontuacao_total |
Soma pontuações obtidas |
calcular_pontuacao_maxima |
Soma pontuações máximas |
calcular_percentual |
Calcula percentual (0-100%) |
passou_na_area |
Verifica aprovação por área |
areas_reprovadas |
Lista áreas com nota < 60% |
determinar_certificacao |
Determina status final |
gerar_relatorio |
Gera relatório completo |
filtrar_por_status |
Filtra candidatos por status |
encontrar_melhor_candidato |
Encontra maior percentual |
classificar_candidatos |
Ordena por desempenho |
7. Exemplo
let mut c = criar_candidato("Rex", "REG-001");
adicionar_resultado(&mut c, AreaConhecimento::Ownership, 90, 100);
adicionar_resultado(&mut c, AreaConhecimento::Traits, 85, 100);
c.missoes_completadas = 15;
let status = determinar_certificacao(&c);
assert_eq!(status, StatusCertificacao::PilotoSenior);
let relatorio = gerar_relatorio(&c);
assert_eq!(relatorio.percentual, 87.5);
8. Missão
- Implementar
criar_candidatoeadicionar_resultado - Implementar
calcular_pontuacao_totalusando.map().sum() - Implementar
calcular_pontuacao_maximade forma similar - Implementar
calcular_percentualcom divisão segura (evitar / 0) - Implementar
passou_na_areaverificando pontuação >= 60% do máximo - Implementar
areas_reprovadasfiltrando áreas abaixo do limiar - Implementar
determinar_certificacaoaplicando as regras em cascata - Implementar
gerar_relatoriocombinando todas as informações - Implementar
filtrar_por_status,encontrar_melhor_candidatoeclassificar_candidatos
9. Como Executar
cargo build
cargo test
cargo clippy -- -D warnings
cargo fmt --check
10. Dicas
- Use
.iter().map(|r| r.pontuacao).sum()para somar pontuações - Divisão por zero: verifique se
pontuacao_maxima > 0antes de dividir - Aprovação:
pontuacao * 100 / maximo >= 60(evita floats) - Classificação:
candidatos.iter().max_by()para encontrar o melhor determinar_certificacao: verifique reprovações primeiro, depois percentualStatusCertificacaoderivaOrd— a ordem dos variants importa