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نوع استاندارد برای پیادهسازی مدیریت خطاها است که در روز چهارم دوره خواهیم دید.