Bảng tra cứu nhanh Rust (cheat sheet)
Một trang để tra nhanh những thứ bạn hay cần xem lại mà không phải đọc lại cả bài học. Mỗi phần đều có liên kết về trang giải thích kỹ hơn.
Từ khóa
Phần tiêu đề “Từ khóa”| Từ khóa | Ý nghĩa |
|---|---|
let |
Khai báo biến (Biến) |
mut |
Cho phép biến hoặc tham chiếu thay đổi được (Biến) |
const |
Khai báo hằng số (Biến) |
fn |
Khai báo hàm (Hàm) |
struct |
Khai báo struct (Struct) |
enum |
Khai báo enum (Enum) |
impl |
Thêm phương thức cho một kiểu (Struct, Trait) |
trait |
Khai báo trait (Trait) |
match |
So khớp mẫu (pattern matching) trên một giá trị (Match) |
if let / while let |
So khớp với đúng một mẫu (If Let / While Let) |
loop / while / for |
Ba loại vòng lặp (Vòng lặp, While, For) |
break / continue |
Điều khiển vòng lặp (Break/Continue) |
mod |
Khai báo module (Module) |
pub |
Cho phép dùng một thành phần bên ngoài module của nó (Module) |
use |
Đưa một đường dẫn vào phạm vi (scope) (Module) |
unsafe |
Mở khóa con trỏ thô và các thao tác mà bạn tự chịu trách nhiệm kiểm tra (Unsafe) |
move |
Buộc closure lấy quyền sở hữu các giá trị nó bắt (capture) (Đồng thời) |
& / &mut |
Mượn / mượn khả biến một giá trị (Mượn) |
Phương thức thường dùng của String
Phần tiêu đề “Phương thức thường dùng của String”| Phương thức | Công dụng |
|---|---|
.len() |
Độ dài tính theo byte |
.trim() |
Bỏ khoảng trắng ở đầu và cuối |
.to_uppercase() / .to_lowercase() |
Đổi chữ hoa / chữ thường |
.contains(pat) |
Kiểm tra có chứa chuỗi con / mẫu hay không |
.replace(from, to) |
Thay thế mọi chỗ khớp |
.push_str(s) |
Nối thêm một &str |
.push(c) |
Nối thêm một char |
.chars() |
Duyệt qua từng ký tự |
.split(pat) |
Tách thành một iterator gồm các chuỗi con |
.parse::<T>() |
Chuyển văn bản sang kiểu khác (trả về Result) |
Xem trang Chuỗi để biết chi tiết và ví dụ.
Phương thức thường dùng của Vec
Phần tiêu đề “Phương thức thường dùng của Vec”| Phương thức | Công dụng |
|---|---|
.push(x) |
Thêm vào cuối |
.pop() |
Lấy ra và trả về phần tử cuối (Option) |
.remove(i) |
Xóa phần tử ở vị trí i |
.len() |
Số phần tử |
.is_empty() |
Kiểm tra vector có rỗng không |
.get(i) |
Truy cập theo chỉ số một cách an toàn (Option, không panic) |
.iter() |
Duyệt qua bằng tham chiếu |
.contains(&x) |
Kiểm tra có chứa một giá trị không |
.sort() |
Sắp xếp tại chỗ |
.sort_by_key(|x| ...) |
Sắp xếp theo một trường hoặc một khóa tính ra |
.dedup() |
Bỏ các phần tử trùng nằm liền nhau (nên sắp xếp trước) |
Xem các trang Vector, Sắp xếp và tìm kiếm và Iterator để biết chi tiết và ví dụ.
Nên dùng collection nào?
Phần tiêu đề “Nên dùng collection nào?”| Kiểu | Dùng khi bạn cần… |
|---|---|
Vec<T> |
Một danh sách có thứ tự, có thể mở rộng |
HashMap<K, V> |
Tra cứu nhanh một giá trị theo khóa |
HashSet<T> |
Các phần tử không trùng nhau và kiểm tra nhanh “có trong này không?” |
BTreeMap<K, V> |
Các cặp khóa–giá trị được giữ theo thứ tự khóa |
VecDeque<T> |
Một hàng đợi: thêm và lấy ra ở cả hai đầu |
Xem các trang HashMap và HashSet và BTreeMap để biết chi tiết và ví dụ.
Option và Result
Phần tiêu đề “Option và Result”| Phương thức | Dùng cho | Công dụng |
|---|---|---|
.unwrap() |
Cả hai | Lấy giá trị, panic nếu là None/Err |
.expect("msg") |
Cả hai | Giống .unwrap(), nhưng với thông báo panic do bạn viết |
.unwrap_or(default) |
Cả hai | Lấy giá trị, hoặc một giá trị dự phòng |
.is_some() / .is_none() |
Option |
Kiểm tra đó là biến thể (variant) nào |
.is_ok() / .is_err() |
Result |
Kiểm tra đó là biến thể nào |
? |
Cả hai | Trả về sớm khi gặp None/Err |
Xem các trang Option và Result để biết chi tiết và ví dụ.
Định dạng (println!, format!)
Phần tiêu đề “Định dạng (println!, format!)”| Định dạng | In ra gì |
|---|---|
{} |
Hiển thị bình thường (cần trait Display) |
{:?} |
Định dạng debug |
{:#?} |
Định dạng debug, trình bày đẹp nhiều dòng |
{:.2} |
2 chữ số thập phân |
{:5} |
Đệm cho đủ độ rộng 5 |
{name} |
Chèn trực tiếp biến tên là name |
Xem trang In ra màn hình để biết chi tiết và ví dụ.
Lệnh Cargo
Phần tiêu đề “Lệnh Cargo”| Lệnh | Công dụng |
|---|---|
cargo new name |
Tạo dự án mới |
cargo run |
Build và chạy |
cargo check |
Kiểm tra lỗi thật nhanh, không build ra file chạy |
cargo test |
Chạy các test |
cargo add crate |
Thêm một thư viện phụ thuộc |
cargo fmt |
Định dạng code |
cargo clippy |
Soát code để tìm lỗi hay gặp |
cargo build --release |
Build ra file chạy đã tối ưu |
Xem trang Cargo và crate để biết chi tiết và ví dụ.
Cú pháp range
Phần tiêu đề “Cú pháp range”| Cú pháp | Ý nghĩa |
|---|---|
1..5 |
Từ 1 đến 5, không gồm 5 |
1..=5 |
Từ 1 đến 5, gồm cả 5 |
..3 |
Từ đầu đến 3, không gồm 3 |
2.. |
Từ 2 đến hết |
.. |
Tất cả |
Xem các trang For và Slice để biết chi tiết và ví dụ.
Các crate phổ biến
Phần tiêu đề “Các crate phổ biến”| Bạn cần… | Crate | Bài học |
|---|---|---|
| JSON (và các định dạng khác) | serde + serde_json |
JSON với Serde |
| Code bất đồng bộ, hẹn giờ, lập trình mạng | tokio |
Async/Await |
| Giao diện dòng lệnh | clap |
Công cụ dòng lệnh với clap |
| Xử lý lỗi dễ dàng | anyhow, thiserror |
anyhow & thiserror |
| Số ngẫu nhiên | rand |
Số ngẫu nhiên |
| Biểu thức chính quy | regex |
Biểu thức chính quy |
| Ngày và giờ | chrono |
Ngày và giờ |
| Ghi log | log + env_logger, tracing |
Ghi log |
| Web server | axum |
Web API với Axum |
Thêm bất kỳ crate nào bằng cargo add <crate>. Xem Cargo và crate để biết cách chọn một crate tốt.
Đọc thêm
Phần tiêu đề “Đọc thêm”- Rust Language Cheat Sheet — cheats.rs (tiếng Anh): một trang tra cứu lớn hơn nhiều, từ cú pháp đến cách bố trí bộ nhớ, khi bạn muốn đi sâu hơn.
- Appendix B: Operators and Symbols — The Rust Book (tiếng Anh): mọi toán tử và ký hiệu trong Rust, kèm ý nghĩa.
- std::fmt — tài liệu thư viện chuẩn (tiếng Anh): toàn bộ cú pháp định dạng đằng sau
println!vàformat!: độ rộng, đệm, độ chính xác và hơn thế nữa. - Cargo Commands — The Cargo Book (tiếng Anh): mọi lệnh
cargovà các tùy chọn của nó. - The Rust Standard Library (tiếng Anh): tài liệu API đầy đủ cho
String,Vec,Option,Resultvà mọi thứ khác. Hãy dùng ô tìm kiếm ở phía trên.