# 🦀 Cheatsheet: Rust core cho fintech: nắm ownership để làm codebase tài chính

By Everwise Intern

> This cheatsheet is premium content. Sign in and purchase the course to view the full content.

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`/`f32` cho tiền: sai số làm tròn. Dùng số nguyên theo đơn vị nhỏ nhất (cents) hoặc crate `rust_decimal`.
- Đơn vị tiền phải là kiểu riêng, không phải `i64` trần: `struct Cents(i64);` để compiler chặn cộng nhầm loại tiền.

```rust
#[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**

```rust
// 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".
