Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Result

Result похож на Option, но указывает на успех или неудачу операции, каждое из которых представлено разным вариантом перечисления. Он обобщённый: Result<T, E>, где T используется в варианте Ok, а E появляется в варианте Err.

// Copyright 2023 Google LLC
// SPDX-License-Identifier: Apache-2.0

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!("Dear diary: {contents} ({bytes} bytes)");
            } else {
                println!("Could not read file content");
            }
        }
        Err(err) => {
            println!("The diary could not be opened: {err}");
        }
    }
}
This slide should take about 5 minutes.
  • Как и с Option, успешное значение находится внутри Result, и разработчик вынужден явно его извлечь. Это поощряет проверку ошибок. Если ошибка не должна случиться никогда, можно вызвать unwrap() или expect(), и это тоже сигнализирует о намерении разработчика.
  • Документацию Result рекомендуется прочитать. Не во время курса, но стоит упомянуть. Там много удобных методов и функций, которые помогают функциональному стилю программирования.
  • Result — стандартный тип для реализации обработки ошибок, как мы увидим в четвёртый день.