'Option' là gì?
Thuộc phần Logic và luồng chương trình trong hành trình Rust của Coddy. Bài học 35 trên 66.
Trong lập trình, bạn thường gặp những trường hợp một giá trị có thể có hoặc không. Ví dụ, khi tìm một phần tử trong danh sách, bạn có thể tìm thấy phần tử đó hoặc phần tử đó có thể không tồn tại. Các ngôn ngữ lập trình truyền thống thường dùng những giá trị đặc biệt như null hoặc -1 để biểu thị “không có gì”, nhưng cách này có thể gây ra bug và sự cố.
Rust chọn một cách tiếp cận khác với kiểu liệt kê Option<T>. Đây là kiểu dữ liệu tích hợp sẵn, biểu thị rõ khả năng không có giá trị. Thay vì đoán xem một giá trị có tồn tại hay không, Rust buộc bạn xử lý trước cả hai trường hợp.
Enum Option có chính xác hai biến thể:
Some(value) // Chứa một giá trị
None // Không chứa giá trịKhi một hàm có thể không trả về giá trị, hàm đó trả về một Option. Nếu có giá trị cần trả về, hàm bọc giá trị đó trong Some. Nếu không có giá trị, hàm trả về None.
Điều này thể hiện rõ khả năng giá trị không tồn tại trong hệ thống kiểu dữ liệu, giúp bạn tránh vô tình sử dụng một giá trị không tồn tại.
Bạn đã thấy Option hoạt động với phương thức .get() của hash map: phương thức này trả về Some(&value) khi khóa tồn tại, hoặc None khi khóa không tồn tại. Mẫu này xuất hiện xuyên suốt Rust, giúp code của bạn an toàn và dễ dự đoán hơn.
Tự làm thử
Bài học này không có thử thách code.
Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Tất cả bài học trong Logic và luồng chương trình
1Luồng điều khiển nâng cao
Biểu thức 'match'Khớp nhiều giá trịKhớp các phạm viBiểu thức 'if let'Vòng lặp dưới dạng biểu thứcÔn tập: Trình phân tích cú pháp lệnh đơn giản4Nhóm dữ liệu bằng Struct
Struct là gì?Tổng quan về StructTruy cập các trường của StructStruct có thể thay đổiStruct làm tham số cho hàmStruct dạng tupleÔn tập: Tạo Struct Book2Giới thiệu về vector
Vector là gì?Tạo vectorThêm phần tử bằng pushTruy cập phần tử trong vectorLặp qua vectorLặp có thể thay đổiXóa phần tửÔn tập: Bộ theo dõi điểm số cơ bản5Cặp khóa-giá trị với bảng băm
Bảng băm là gì?Tạo bảng bămThêm cặp khóa-giá trịTruy cập giá trịDuyệt qua bảng bămCập nhật giá trịXóa một cặpÔn tập: Bộ đếm từ8Dự án: Quản lý kho hàng đơn giản
Thiết lập dự ánThêm mặt hàngKiểm tra hàng tồn khoBán mặt hàngKết hợp tất cả11Thử thách cuối cùng
Ôn tập: Các mục duy nhấtÔn tập: Trình xác thực hồ sơ người dùngÔn tập: Tổng hợp điểm3Danh sách việc cần làm trên dòng lệnh
Thiết lập dự ánThêm một việcXem tất cả việcXóa một việcCode hoàn chỉnh6Xử lý giá trị vắng mặt với 'Option'
'Option' là gì?Dùng 'match' với 'Option'is_some() và is_none()Lấy giá trị từ 'Option'expectCung cấp giá trị mặc định: unwrap_orÔn tập: tìm một phần tử9Lát cắt chuỗi và hơn thế nữa
String và &strTạo lát cắt chuỗiLát cắt làm tham số hàmCác lát cắt khácÔn tập: Tìm từ đầu tiênTự luyện tập: Trình biên dịch Rust online