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.