dpway

The middle way!

[Rust][010] mem::take and mem::replace

rust-cheat-sheet

Trong Rust, khi làm việc với enum, chúng ta có thể cần thay đổi một biến thể (variant) sang một biến thể khác mà vẫn giữ lại dữ liệu của một số trường. Một cách tiếp cận phổ biến nhưng không tối ưu là sử dụng .clone(), điều này dẫn đến cấp phát bộ nhớ không cần thiết. Thay vào đó, Rust cung cấp hai hàm hữu ích: mem::takemem::replace, giúp chúng ta thực hiện việc này mà không cần clone.

[Rust][009] Destructors

rust-cheat-sheet

Rust không cung cấp khối finally như trong các ngôn ngữ khác để đảm bảo một đoạn mã luôn được thực thi trước khi thoát khỏi một hàm. Thay vào đó, Rust sử dụng destructor của một đối tượng (Drop trait) để thực thi mã cần thiết trước khi chương trình thoát.

[Rust][008] Collections Are Smart Pointers

rust-cheat-sheet

Trong Rust, collections không chỉ đơn giản là các cấu trúc dữ liệu chứa nhiều phần tử, mà còn hoạt động giống như smart pointers nhờ vào trait Deref. Điều này giúp chúng cung cấp cả quyền sở hữu và quyền mượn dữ liệu một cách linh hoạt.

[Rust][007] Default Trait

rust-cheat-sheet

Trong Rust, nhiều kiểu dữ liệu có constructor riêng, nhưng Rust không thể tổng quát hóa chúng bằng một cơ chế chung. Vì vậy, Default trait ra đời để hỗ trợ việc khởi tạo giá trị mặc định cho các kiểu dữ liệu, đặc biệt hữu ích trong các cấu trúc dữ liệu tổng quát và container như Option::unwrap_or_default().

[Rust][006] Constructor

rust-cheat-sheet

Rust không cung cấp constructors như một thành phần ngôn ngữ, nhưng có một quy ước chung là sử dụng một hàm liên kết (associated function) có tên new để tạo đối tượng.