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-му дні.