inflearn logo

Rust thanh lịch trình độ trung cấp (5) - Option & Result

Bạn có đang cứ gặp `Option` và `Result` là dùng `unwrap()` trước không? Hãy học cách phân biệt trường hợp không có giá trị với trường hợp thao tác thất bại, cũng như cách liên kết các bước xử lý bằng `map`, `and_then` và `?`. Thông qua các ví dụ có thể thực thi và bài thực hành tổng hợp, bạn sẽ tự mình quyết định nên truyền lỗi đi đến đâu và xử lý lỗi ở đâu.

12 học viên đang tham gia khóa học này

Độ khó Trung cấp trở lên

Thời gian Không giới hạn

Rust
Rust
Rust
Rust

Bạn sẽ nhận được điều này sau khi học.

  • Có thể phân biệt trường hợp không có giá trị và trường hợp thất bại bằng cách biểu diễn chúng bằng Option và Result.

  • Bạn có thể chọn cách xử lý giá trị mặc định và lỗi phù hợp với tình huống thay vì dùng unwrap().

  • Bạn có thể kết nối ngắn gọn nhiều bước xử lý bằng cách sử dụng map, and_then và ?.

  • Bạn có thể sử dụng collect và transpose để thu thập nhiều kết quả hoặc chuyển đổi Option và Result lồng nhau.

  • Có thể định nghĩa các loại lỗi dưới dạng kiểu liệt kê và phân biệt lỗi cần truyền cho bên gọi với lỗi cần xử lý trực tiếp.

Viết mã Rust với hành động tiếp theo rõ ràng ngay cả khi không có giá trị hoặc xảy ra lỗi

Khi viết mã Rust, bạn thường gặp Option và Result. Ban đầu, bạn lấy giá trị bằng unwrap(), nhưng khi không có đầu vào hoặc nhận được giá trị khác với dự kiến, bạn sẽ băn khoăn không biết nên xử lý thế nào.

Trong khóa học này, chúng ta bắt đầu bằng việc phân biệt trường hợp không có giá trị và trường hợp thao tác thất bại. Chúng ta lần lượt học cách xác định giá trị mặc định, kết nối nhiều bước xử lý và truyền lỗi đến bên gọi. Thay vì ghi nhớ tên các API, chúng ta sẽ xem xét bên gọi hàm cần biết điều gì và phải đưa ra những quyết định nào.

Bạn có thể áp dụng khi kiểm tra dữ liệu đầu vào của người dùng, chuyển đổi chuỗi thành số, đọc tệp hoặc tập hợp kết quả của nhiều tác vụ. Bạn sẽ luyện tập tự thiết kế mã xử lý lỗi bằng cách trực tiếp chạy các ví dụ và hoàn thành bài thực hành tổng hợp.

Các bạn sẽ học những nội dung như sau

(1) Xử lý trường hợp không có giá trị bằng Option

Nắm được Some và None có ý nghĩa gì, đồng thời quyết định khi không có giá trị thì nên dùng giá trị mặc định hay truyền nguyên giá trị đó. unwrap_or và unwrap_or_else có sự khác biệt như thế nào, rồi kết nối việc chuyển đổi giá trị bằng map và and_then để liên kết các phép biến đổi giá trị. Bạn cũng học cách mượn giá trị bên trong mà không chuyển quyền sở hữu, hoặc take để lấy giá trị ra.

Sự khác biệt giữa map và and_then

(2) Biểu đạt lý do thất bại bằng Result

Ok và Err để phân biệt thành công và thất bại, đồng thời ghi lại lý do thất bại trong mã. map_err để thay đổi kiểu lỗi và biểu diễn các lỗi khác nhau bằng enum. Thay vì luôn lấy giá trị ra, hãy viết hàm để bên gọi có thể xử lý khi xảy ra lỗi.

(3) Truyền lỗi bằng ? và xử lý ở những nơi cần thiết

? được dùng để lấy giá trị và trường hợp hàm trả về sớm. Tìm hiểu cách sử dụng ? tùy theo kiểu trả về của hàm, đồng thời phân biệt việc truyền lỗi trong thư viện với việc thông báo cho người dùng trong chương trình.

Viết hàm gọn gàng với ?

(4) Tổng hợp nhiều kết quả và sắp xếp các kiểu lồng nhau

Dùng collect để gom nhiều Result thành một kết quả duy nhất, đồng thời tìm hiểu điều gì xảy ra khi phát sinh lỗi trong quá trình xử lý. Sử dụng ok_or, ok và transpose để chuyển đổi giữa Option và Result, đồng thời xem xét thông tin nào được giữ lại hoặc biến mất.

(5) Kiểm tra mức độ hiểu bằng bài thực hành tổng hợp và câu đố

Tự mình triển khai các hàm chuyển đổi giá trị đầu vào và phân biệt lỗi tính toán. Bạn sẽ kiểm thử không chỉ với dữ liệu đầu vào hợp lệ mà cả khi không có giá trị hoặc khi nhận được dữ liệu đầu vào không hợp lệ. Trong bài quiz cuối cùng, bạn sẽ kiểm tra kết quả thực thi của mã và lý do lựa chọn API, qua đó củng cố những nội dung đã học.

Lưu ý trước khi tham gia khóa học

Môi trường thực hành

  • Bạn cần môi trường Windows·macOS·Linux có thể chạy Rust và Cargo.

  • Vui lòng chuẩn bị phiên bản Rust ổn định hỗ trợ Rust 2024 Edition.

  • Bạn có thể thực hành bằng trình chỉnh sửa mã và terminal thường dùng.

Tài liệu học tập

  • Giáo trình web có phần giải thích và mã nguồn theo từng chương

  • Mã nguồn ví dụ có thể trực tiếp chạy bằng Cargo

  • Mã thực hành tổng hợp và kiểm thử tự động

  • Nội dung cốt lõi cùng câu hỏi trắc nghiệm và lời giải

Kiến thức cần có và lưu ý

Giả định rằng bạn đã biết các khái niệm cơ bản về biến, hàm, câu lệnh điều kiện, struct, enum, quyền sở hữu và mượn trong Rust. Nếu có thể đọc mã phân loại giá trị bằng match, bạn sẽ dễ dàng theo dõi hơn.

Trước khi chạy ví dụ, hãy thử dự đoán kết quả trước. Sau khi chạy, hãy thay đổi đầu vào để kiểm tra cả trường hợp không có giá trị và trường hợp xảy ra lỗi. Trong phần thực hành tổng hợp, bên cạnh việc vượt qua các bài kiểm thử, bạn cũng nên thử giải thích lý do lựa chọn kiểu trả về và phương pháp xử lý lỗi tương ứng.

Khuyến nghị cho
những người này

Khóa học này dành cho ai?

  • Những ai đã học cú pháp cơ bản của Rust nhưng mỗi khi xử lý Option và Result lại gặp khó khăn

  • Những người muốn cải thiện mã nguồn vốn phụ thuộc vào unwrap() hoặc các câu lệnh match lặp đi lặp lại

  • Dành cho những ai muốn hiểu chính xác khi nào có thể sử dụng ? và lỗi được truyền đi như thế nào

  • Dành cho những người muốn tự mình triển khai việc xác thực giá trị đầu vào và xử lý lỗi, rồi kiểm tra bằng các bài kiểm thử

Cần biết trước khi bắt đầu?

  • Bạn cần biết cú pháp cơ bản của Rust, chẳng hạn như biến, hàm và câu lệnh điều kiện.

  • Bạn nên hiểu các khái niệm cơ bản về quyền sở hữu, việc mượn và tham chiếu.

  • Bạn cần có khả năng đọc mã định nghĩa cấu trúc và kiểu liệt kê, đồng thời phân biệt các giá trị bằng `match`.

  • Nếu bạn biết cách chạy và kiểm thử các ví dụ bằng Cargo, việc theo dõi phần thực hành sẽ dễ dàng hơn.

Xin chào
Đây là hatemogi

Xác minh sự nghiệp

2,264

Học viên

176

Đánh giá

27

Trả lời

4.7

Xếp hạng

11

Các khóa học

Tôi là một lập trình viên backend rất quan tâm đến lập trình hàm. Tôi từng dẫn dắt các đội ngũ phát triển với vai trò Trưởng nhóm phát triển tại Kakao, Kỹ sư cấp cao tại NHN và Trưởng nhóm tại LINE+, đồng thời từng làm Trưởng nhóm phát triển tại startup AI mang tên DINOTICIA và thực hiện các dự án bằng Rust.

Chương trình giảng dạy

Tất cả

18 bài giảng ∙ (1giờ 29phút)

Ngày đăng: 
Cập nhật lần cuối: 

Đánh giá

Chưa có đủ đánh giá.
Hãy trở thành tác giả của một đánh giá giúp mọi người!

Khóa học khác của hatemogi

Hãy khám phá các khóa học khác của giảng viên!

Khóa học tương tự

Khám phá các khóa học khác trong cùng lĩnh vực!

Ưu đãi có thời hạn

146.692 ₫

37%

234.708 ₫