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.