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 file = fs::File::open("diario.txt");
    match file {
        Ok(mut file) => {
            let mut contents = String::new();
            file.read_to_string(&mut contents);
            println!("Querido diário: {contents}");
        },
        Err(err) => {
            println!("Não foi possível abrir o diário: {err}");
        }
    }
}
  • Como em Option, o valor bem-sucedido fica dentro de Result, 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() ou expect() 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.