No description
Find a file
2026-08-14 07:21:49 +02:00
.woodpecker chore: migrate CI to .woodpecker/{push,branch}.yml 2026-08-14 07:21:49 +02:00
src initial content 2026-08-14 07:21:42 +02:00
tests initial content 2026-08-14 07:21:42 +02:00
.gitignore Initial commit 2026-08-14 05:21:22 +00:00
Cargo.lock initial content 2026-08-14 07:21:42 +02:00
Cargo.toml chore: declare MSRV 1.85 (edition 2024) 2026-08-14 07:21:49 +02:00
LICENSE chore: add AGPL-3.0 license and standard .gitignore 2026-08-14 07:21:49 +02:00
README.md fix: content audit corrections (accuracy, coherence, concordância, tests) 2026-08-14 07:21:49 +02:00

Lição 19: Decodificação Tática (Pattern Matching)

1. Narrativa

No calor da batalha, o mecha Æther recebe sinais codificados que devem ser interpretados instantaneamente. Decodificação Tática é a arte do pattern matching — o piloto usa match para classificar sinais, decodificar comandos e tomar decisões baseadas em padrões precisos.

2. Conceito

Pattern matching é o mecanismo de decisão mais poderoso de Rust:

  • match: Expressão exaustiva que testa todos os padrões
  • if let: Pattern matching para um único padrão de interesse
  • let else: Extrai valor ou retorna cedo
  • Patterns: literais, variáveis, wildcards (_), ranges, destructuring

3. Requisitos

  • Usar match para classificar valores
  • Aplicar destructuring em enums e structs
  • Utilizar guards e padrões avançados

4. Design de Dados

graph LR
    A[Valor de entrada] --> B[match]
    B --> C[Padrão 1]
    B --> D[Padrão 2]
    B --> E[Padrão N]
    B --> F[Wildcard _]
    C --> G[Expressão resultado]

5. Diagrama de Fluxo

flowchart TD
    A[Receber sinal] --> B[match sinal]
    B --> C{Padrão corresponde?}
    C -->|Alerta| D[Protocolo de alerta]
    C -->|Comando| E[Executar ação]
    C -->|Diagnóstico| F[Analisar sistema]
    C -->|Desconhecido| G[Registrar anomalia]
    D --> H[Retorna ação]
    E --> H
    F --> H
    G --> H

6. Funções

Função Descrição
classificar_sinal Classifica um sinal numérico em categorias
decodificar_comando Decodifica comando textual em ação
verificar_nivel Verifica nível de energia (baixo/médio/alto)
interpretar_status Interpreta código de status do mecha
cor_respectiva Retorna cor para cada tipo de alerta
prioridade_missao Classifica prioridade baseada em parâmetros
analisar_leitura Analisa leitura de sensor com ranges
filtrar_classificacao Classifica números em categorias

7. Exemplo

enum Comando {
    Avancar,
    Recuar,
    Parar,
}

fn interpretar(comando: Comando) -> &'static str {
    match comando {
        Comando::Avancar => "Movendo para frente",
        Comando::Recuar => "Recuando",
        Comando::Parar => "Parado",
    }
}

// Uso:
// let acao = interpretar(Comando::Avancar);
// assert_eq!(acao, "Movendo para frente");

8. Missão

  1. Implementar classificar_sinal usando match com ranges
  2. Implementar decodificar_comando com match em strings
  3. Implementar verificar_nivel com match em ranges numéricos
  4. Implementar interpretar_status com match em enum
  5. Implementar cor_respectiva mapeando tipos para cores
  6. Implementar prioridade_missao com match em tuplas
  7. Implementar analisar_leitura com match e guards
  8. Implementar filtrar_classificacao categorizando números

9. Como Executar

cargo build
cargo test
cargo clippy -- -D warnings
cargo fmt --check

10. Dicas

  • match deve ser exaustivo — cobrir todos os casos possíveis
  • Use _ como wildcard para casos restantes
  • Ranges: 1..=10 é inclusivo, 1..10 é exclusivo
  • Pattern matching em enums é uma das funcionalidades mais poderosas de Rust