No description
- Rust 100%
| .woodpecker | ||
| src | ||
| tests | ||
| .gitignore | ||
| Cargo.lock | ||
| Cargo.toml | ||
| LICENSE | ||
| README.md | ||
Lição 27: Nomenclatura Avançada (Type Aliases)
1. Narrativa
Na Academia Æther, cada sistema do mecha tem designações técnicas complexas. Type aliases permitem ao piloto criar nomes claros e concisos para tipos verbosos — como renomear Result<T, ErroSistema> para simplesmente Resultado<T>. Comunicação clara entre piloto e mecha é vital para a missão!
2. Conceito
Type aliases criam nomes alternativos para tipos existentes:
type Nome = Tipo: Alias simples — sem novos tipos- Simplificação:
type Resultado<T> = Result<T, ErroMecha>— reduz verbosidade - Legibilidade:
type Coordenadas = (f64, f64, f64)— nome significativo - Manutenção: Mudar o alias muda em todos os lugares que o usam
- Enums como erros:
ErroMecha— enum personalizado para tratamento de erros
3. Requisitos
- Definir type aliases para simplificar assinaturas complexas
- Usar aliases em funções para manter código legível
- Criar enum de erro personalizado e usar em Results
- Combinar aliases com HashMap e coleções
4. Design de Dados
graph LR
A["Result<T, ErroMecha>"] --> B["type Resultado<T>"]
C["(f64, f64, f64)"] --> D["type Coordenadas"]
E["String"] --> F["type ModuloId"]
G["HashMap<ModuloId, usize>"] --> H["type Inventario"]
I["(ModuloId, String)"] --> J["type Diagnostico"]
5. Diagrama de Fluxo
flowchart TD
A[Início] --> B[Verificar limites com Coordenadas]
B --> C{Dentro do raio?}
C -->|Sim| D["Ok(distância)"]
C -->|Não| E["Err(ErroMecha)"]
D --> F[Registrar módulo no Inventario]
F --> G[Diagnosticar módulo]
G --> H{Módulo encontrado?}
H -->|Sim| I["Ok(Diagnostico)"]
H -->|Não| J["Err(ModuloNaoEncontrado)"]
I --> K[Gerar relatório]
J --> K
6. Funções
| Função | Descrição |
|---|---|
verificar_limites |
Verifica se coordenadas estão dentro do raio seguro |
registrar_modulo |
Adiciona ou incrementa módulo no inventário |
diagnosticar_modulo |
Diagnostica módulo retornando Resultado<Diagnostico> |
calcular_distancia |
Distância euclidiana 3D entre duas Coordenadas |
gerar_relatorio |
Converte lista de Diagnostico em relatório |
verificar_energia |
Verifica energia para manobra |
contar_modulos |
Soma total de módulos no inventário |
remover_modulo |
Remove módulo retornando quantidade |
7. Exemplo
type Resultado<T> = Result<T, ErroMecha>;
type Coordenadas = (f64, f64, f64);
fn verificar_limites(posicao: Coordenadas) -> Resultado<f64> {
let dist = (posicao.0.powi(2) + posicao.1.powi(2) + posicao.2.powi(2)).sqrt();
if dist > 1000.0 {
Err(ErroMecha::SensorFalhou("Fora do alcance".into()))
} else {
Ok(dist)
}
}
8. Missão
- Entender os type aliases definidos:
Resultado<T>,Coordenadas,ModuloId,Diagnostico,Inventario - Implementar
verificar_limitesusando aliasCoordenadaseResultado<f64> - Implementar
registrar_modulomanipulandoInventario - Implementar
diagnosticar_moduloretornandoResultado<Diagnostico> - Implementar
calcular_distanciaentre duasCoordenadas - Implementar
gerar_relatorioformatando[Diagnostico] - Implementar
verificar_energiacomResultado<f64> - Implementar
contar_moduloseremover_modulo
9. Como Executar
cargo build
cargo test
cargo clippy -- -D warnings
cargo fmt --check
10. Dicas
- Type aliases não criam novos tipos — são transparantes para o compilador
- Use aliases para documentar intenção:
Coordenadasdiz mais que(f64, f64, f64) - Aliases genéricos como
Resultado<T>reduzem repetição deResult<T, ErroMecha> - O enum
ErroMechaderivaDebug, Clone, PartialEq— necessário para testes e propagação