dpway

The middle way!

[Rust][005] Concatenating Strings

Tags = [ Rust ]

rust-cheat-sheet

Trong Rust, có nhiều cách để nối chuỗi, bao gồm sử dụng phương thức push, push_str trên String có thể thay đổi hoặc sử dụng toán tử +. Tuy nhiên, cách tiếp cận linh hoạt và dễ đọc nhất là sử dụng macro format!, đặc biệt khi cần trộn chuỗi ký tự cố định và biến đổi.

Concatenating Strings


Lợi Ích của format!

  1. Tính dễ đọc: Cú pháp gọn gàng giúp dễ hiểu và dễ duy trì.
  2. Dễ dàng kết hợp chuỗi: Tránh phải gọi push_str nhiều lần.
  3. Tránh lỗi khi thao tác trực tiếp với chuỗi.

Ví dụ

Thay vì sử dụng phương thức push_str, ta có thể viết:

fn say_hello(name: &str) -> String {
    format!("Hello, {}!", name)
}

fn main() {
    let message = say_hello("Rust");
    println!("{}", message);
}

🔹 format! giúp mã nguồn dễ đọc hơn và loại bỏ các lỗi có thể gặp phải khi nối chuỗi thủ công.


Nhược Điểm của format!

  • Không tối ưu về hiệu suất: Nếu có nhiều thao tác nối chuỗi, push hoặc push_str trên một String đã được cấp phát trước có thể nhanh hơn.
  • Tạo thêm đối tượng trung gian: format! tạo một String mới thay vì chỉnh sửa chuỗi hiện có.

Ví dụ so sánh hiệu suất

Nếu bạn cần thực hiện nhiều thao tác nối chuỗi, cách tiếp cận tối ưu hơn là:

fn build_string() -> String {
    let mut s = String::with_capacity(50); // Cấp phát trước bộ nhớ
    s.push_str("Hello");
    s.push(' ');
    s.push_str("Rust");
    s.push('!');
    s
}

fn main() {
    let message = build_string();
    println!("{}", message);
}

🔹 Với phương pháp trên, ta tránh được việc tạo nhiều đối tượng String không cần thiết.


Khi Nào Nên Dùng format!?

✅ Khi cần đọc và duy trì mã dễ dàng hơn. ✅ Khi trộn nhiều kiểu dữ liệu vào một chuỗi. ✅ Khi hiệu suất không phải là mối quan tâm chính.

🚀 Tóm lại: format! là công cụ mạnh mẽ giúp nối chuỗi trong Rust một cách trực quan, nhưng cần xem xét hiệu suất nếu xử lý nhiều dữ liệu.