Result
Result é semelhante a Option, mas indica o sucesso ou falha de uma operação, cada um com um tipo diferente. Isso é 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 foi possível ler o conteúdo do arquivo"); } } Err(err) => { println!("Não foi possível abrir o diário: {err}"); } } }
This slide should take about 5 minutes.
- 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. Resulté o tipo padrão para implementar tratamento de erros, como veremos no Dia 4.