Result

Result é semelhante a Option, mas indica o sucesso ou falha de uma operação, cada um com um tipo diferente. Isso é semelhante ao Res definido no exercício de expressão, mas genérico: Result<T, E> onde T é usado na variante Ok e E aparece na variante Err.

use std::fs::File;
use std::io::Read;

fn main() {
    let file: Result<File, std::io::Error> = File::open("diary.txt");
    match file {
        Ok(mut file) => {
            let mut contents = String::new();
            if let Ok(bytes) = file.read_to_string(&mut contents) {
                println!("Querido diĂĄrio: {contents} ({bytes} bytes)");
            } else {
                println!("NĂŁo Ă© possivel ler o conteĂșdo do arquivo");
            }
        }
        Err(err) => {
            println!("NĂŁo foi possĂ­vel abrir o diĂĄrio: {err}");
        }
    }
}
This slide should take about 10 minutes.
  • 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.
  • Result Ă© o tipo padrĂŁo para implementar tratamento de erros, como veremos no Dia 3.