Option
Chúng ta đã thấy một số cách dùng Option<T>. Kiểu dữ liệu này hoặc lưu trữ một giá trị kiểu T hoặc không lưu trữ gì cả. Ví dụ, hàm String::find trả về một Option<usize>.
fn main() { let name = Hoàng Hữu Văn A; let mut position: Option<usize> = name.find(ă); println!("find trả về {position:?}"); assert_eq!(position.unwrap(), 14); position = name.find('Z'); println!("find trả về {position:?}"); assert_eq!(position.expect("Không tìm thấy ký tự"), 0); }
This slide should take about 10 minutes.
Optionđược sử dụng rộng rãi ở nhiều nơi, không chỉ trong thư viện chuẩn.unwrapsẽ trả về giá trị củaOptionhoặc panic.expecthoạt động tương tự nhưng có thể truyền thêm một thông báo lỗi.- Chương trình có thể panic khi gặp phải giá trị
None, nhưng bạn không thể “vô tình” quên kiểm traNone. - Thông thường, ta có thể thoải mái sử dụng
unwrap/expectkhi thử nghiệm một ý tưởng mới, nhưng code production thường xử lýNonemột cách an toàn hơn.
- Chương trình có thể panic khi gặp phải giá trị
Option<T>được tối ưu để chiếm bằng bộ nhớ nhưTtrong đa số trường hợp.