Tratamento Estruturado de Erros com Result
Já vimos o enum Result. Ele é usado amplamente quando os erros são esperados como parte da operação normal:
use std::fs; use std::io::Read; fn main() { let arquivo = fs::File::open("diario.txt"); match arquivo { Ok(mut arquivo) => { let mut conteudo = String::new(); arquivo.read_to_string(&mut conteudo); println!("Querido diário: {conteudo}"); }, Err(err) => { println!("Não foi possível abrir o diário: {err}"); } } }
- Como em
Option, o valor bem-sucedido fica dentro deResult, forçando o desenvolvedor a extraí-lo explicitamente. Isso encoraja a verificação de erros. No caso em que um erro nunca deve acontecer,unwrap()ouexpect()podem ser chamados, e isso também sinaliza a intenção do desenvolvedor. - A documentação de
Resulté uma leitura recomendada. Não durante o curso, mas vale a pena mencioná-la. Ele contém muitos métodos e funções de conveniência que ajudam na programação ao estilo funcional.