Result

Result مشابه Option است، اما موفقیت یا شکست یک عملیات را نشان می‌دهد، هرکدام با یک نوع متغیر enum متفاوت. این نوع جنریک است: <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} bytes)");
            } else {
                println!("نمی‌توان محتوای فایل را خواند");
            }
        }
        Err(err) => {
            println!("دفتر خاطرات باز نشد: {err}");
        }
    }
}
This slide should take about 5 minutes.
  • همانند Option، مقدار موفقیت‌آمیز درون Result قرار دارد و توسعه‌دهنده را ملزم به استخراج صریح آن می‌کند. این به بررسی خطاها تشویق می‌کند. در صورتی که خطا هرگز نباید رخ دهد، می‌توان از ()unwrap یا ()expect استفاده کرد که این نیز نشان‌دهنده نیت توسعه‌دهنده است.
  • مستندات Result مطالعه‌ای توصیه‌شده است. نه در طول دوره، اما ذکر آن ارزشمند است. این مستندات شامل بسیاری از متدها و توابع کاربردی است که به برنامه‌نویسی به استایل تابع‌محور کمک می‌کند.
  • Result نوع استاندارد برای پیاده‌سازی مدیریت خطاها است که در روز چهارم دوره خواهیم دید.