Portal/Notes πŸ“
Rust

String vs &str

Versi Bahasa Indonesia. Baca dalam Bahasa Inggris

String vs &str

String

  • Dimiliki (owned) oleh variabel, artinya variabel mengontrol memori tersebut.
  • Dapat dimutasi.
  • Ideal untuk string yang ukurannya dapat berubah atau perlu bertahan di luar scope dari reference aslinya.

&str

  • Dipinjam (borrowed), string slice yang immutable.
  • Mewakili view ke dalam string, bukan memiliki data.
  • Biasanya merujuk pada segmen dari String atau string literal.
  • Immutable secara default.

Konversi Antara String dan &str

Konversi &str ke String: Gunakan method to_string atau String::from.

let slice: &str = "Hello";
let owned: String = slice.to_string();
let owned2: String = String::from(slice);

Konversi String ke &str: Pinjam string menggunakan & atau .as\_str().

let owned: String = String::from("Hello");
let slice: &str = &owned;
let slice2: &str = owned.as_str();

Contoh

fn main() {
    let x = "hello ";
    println!("\"{}\"", x.trim()); // ok
    println!("\"{}\"", x + "world"); // error
}
  • Dalam contoh di atas, fungsi x.trim akan berfungsi karena tidak memanipulasi string.
  • Sebaliknya, ia mengembalikan slice dari string asli.
  • Tetapi x + "world" mendapat compile error karena Anda tidak dapat memutasi variabel x: &str.
fn main() {
    let x = "hello ".to_string();
    println!("\"{}\"", x + "world"); // ok
}
  • Contoh di atas akan berfungsi karena x dikonversi menjadi String dan dapat dimutasi.
  • Dengan kata lain, fungsi atau method apa pun yang memanipulasi nilai tidak akan berfungsi menggunakan &str tetapi akan berfungsi menggunakan tipe String.

Referensi


Edit on GitHub

Last updated on

String vs &str | Faisal Affan