📊 Capítulo 10: Enums & Pattern Matching
Especialização em Sistemas com Rust
🗺️ Tratamento Seguro de Ausência e Erros
flowchart TD
DADO{"Tipo de Retorno"}
DADO --> |"Presença ou Ausência"| OPTION["Option<T>\n- Some(valor)\n- None"]
DADO --> |"Sucesso ou Falha"| RESULT["Result<T, E>\n- Ok(valor)\n- Err(erro)"]
OPTION --> MATCH["match exaustivo / if let / operador ?"]
RESULT --> MATCH
MATCH --> TRATADO["Tratamento 100% Seguro em Tempo de Compilação!"]
style DADO fill:#ede7f6,stroke:#512da8,stroke-width:2px
style OPTION fill:#fff3e0,stroke:#ff9800,stroke-width:1.5px
style RESULT fill:#e8f5e9,stroke:#4caf50,stroke-width:1.5px
style MATCH fill:#e1f5fe,stroke:#03a9f4,stroke-width:2px
style TRATADO fill:#c8e6c9,stroke:#2e7d32,stroke-width:2px
🎯 Slide 1: Enums com Dados Embutidos (Tipos Algébricos)
enum Mensagem {
Sair,
Mover { x: i32, y: i32 },
Escrever(String),
TrocarCor(u8, u8, u8),
}
- Cada variante pode carregar dados de tipos completamente distintos, com layout de memória compacto e seguro (Tagged Union).
🎯 Slide 2: O Operador de Interrogação (?)
fn ler_conteudo_arquivo(caminho: &str) -> Result<String, std::io::Error> {
let mut arquivo = File::open(caminho)?; // Retorna Err(e) imediatamente se falhar!
let mut conteudo = String::new();
arquivo.read_to_string(&mut conteudo)?;
Ok(conteudo)
}
- Propagação de erros idiomática, legível e sem blocos gigantescos de
try/catch.
🎯 Slide 3: Pattern Matching Exaustivo
- O
matchem Rust é obrigado a cobrir todas as variantes possíveis de um Enum. Se você adicionar uma nova variante no futuro, o compilador apontará todos os lugares que precisam ser atualizados!
Slide 1 de 1
Atalhos: ← → Navegar • Espaço Avançar • F Tela Cheia • Home Início • End Fim