Result
Result схожий на Option, але вказує на успіх або невдачу операції, кожен з яких має свій варіант переліку. Він має вигляд: Result<T, E>, де T використовується у варіанті Ok, а E з’являється у варіанті 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!("Дорогий щоденник: {contents} ({bytes} байтів)");
} else {
println!("Не вдалося прочитати вміст файлу");
}
}
Err(err) => {
println!("Щоденник не вдалося відкрити: {err}");
}
}
}
This slide should take about 5 minutes.
- Як і у випадку з
Option, успішне значення знаходиться всерединіResult, змушуючи розробника явно витягти його. Це стимулює перевірку помилок. У випадку, коли помилка взагалі не очикуєтся, можна викликатиunwrap()абоexpect(), і це також є сигналом про наміри розробника. - Порекомендуйте прочитати
Resultдокументацію. Не під час курсу, але варто згадати. Вона містить багато зручних методів і функцій, які допомагають програмувати у функціональному стилі. Result— це стандартний тип для реалізації обробки помилок, як ми побачимо у 4-му дні.