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

By Everwise Intern

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.
#[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