No description
Find a file
2026-09-01 13:35:12 +02:00
.woodpecker chore: migrate CI to .woodpecker/{push,branch}.yml 2026-09-01 13:35:12 +02:00
src initial content 2026-09-01 13:35:10 +02:00
tests initial content 2026-09-01 13:35:10 +02:00
.gitignore Initial commit 2026-09-01 11:34:52 +00:00
Cargo.lock initial content 2026-09-01 13:35:10 +02:00
Cargo.toml chore: declare MSRV 1.85 (edition 2024) 2026-09-01 13:35:12 +02:00
LICENSE chore: add AGPL-3.0 license and standard .gitignore 2026-09-01 13:35:12 +02:00
README.md initial content 2026-09-01 13:35:10 +02:00

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

  1. Entender os type aliases definidos: Resultado<T>, Coordenadas, ModuloId, Diagnostico, Inventario
  2. Implementar verificar_limites usando alias Coordenadas e Resultado<f64>
  3. Implementar registrar_modulo manipulando Inventario
  4. Implementar diagnosticar_modulo retornando Resultado<Diagnostico>
  5. Implementar calcular_distancia entre duas Coordenadas
  6. Implementar gerar_relatorio formatando [Diagnostico]
  7. Implementar verificar_energia com Resultado<f64>
  8. Implementar contar_modulos e remover_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: Coordenadas diz mais que (f64, f64, f64)
  • Aliases genéricos como Resultado<T> reduzem repetição de Result<T, ErroMecha>
  • O enum ErroMecha deriva Debug, Clone, PartialEq — necessário para testes e propagação