Cheatsheet: Rust core cho fintech: nắm ownership để làm codebase tài chính
beginner
Tra cứu nhanh cho toàn bộ 3 module. Thuật ngữ kỹ thuật giữ nguyên tiếng Anh.
Module 1: Rust core cho fintech
1.1 Ownership và borrowing khi xử lý tiền
Ba quy tắc ownership:
- Mỗi value có đúng một owner.
- Khi owner ra khỏi scope, value bị
drop. - Chỉ một trong hai tại một thời điểm: nhiều
&T(shared borrow) HOẶC một&mut T(exclusive borrow).
Khi nào move, khi nào borrow:
| Tình huống | Dùng | Lý do |
|---|---|---|
| Đọc số dư, không sửa | &T |
Không cần sở hữu, nhiều nơi đọc cùng lúc |
| Cập nhật số dư tại chỗ | &mut T |
Cần độc quyền ghi |
| Chuyển quyền sở hữu tiền sang ví khác | T (move) |
Ngăn dùng lại value đã chuyển |
| Muốn giữ bản gốc sau khi truyền | clone() hoặc &T |
Tránh move ngoài ý muốn |
Cạm bẫy tiền tệ:
- Không dùng
f64/f32cho tiền: sai số làm tròn. Dùng số nguyên theo đơn vị nhỏ nhất (cents) hoặc craterust_decimal. - Đơn vị tiền phải là kiểu riêng, không phải
i64trần:struct Cents(i64);để compiler chặn cộng nhầm loại tiền.
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
struct Cents(i64);
impl Cents {
fn checked_add(self, other: Cents) -> Option<Cents> {
self.0.checked_add(other.0).map(Cents)
}
}
Borrow checker: lỗi thường gặp
// LỖI: borrow immutable rồi borrow mutable
let mut balance = Cents(100);
let r = &balance;
balance = Cents(200); // không được: r còn sống
println!("{r}");
// ĐÚNG: kết thúc borrow trước
let mut balance = Cents(100);
{
let r = &balance;
println!("{r}");
}
balance = Cents(200);
Tip: Khi bí, hỏi: "Ai sở hữu value này? Có mấy nơi cùng giữ borrow?" Sửa bằng cách thu hẹp scope của borrow hoặc đổi sang
clone()có kiểm soát.
1.2 Lifetimes và domain model tài chính
Lifetime chỉ là nhãn, không tạo ra thời gian sống. Nó nói với compiler "reference này sống ít nhất bằng X".
This cheatsheet is premium content. Sign in and purchase the course to view the full content. Sign in