CodeBlanks Logo Icon CodeBlanks

String ve &str dönüşümü

String ile &str arası dönüşüm yöntemlerini öğrenirsin.

String ve &str dönüşümü

String sahip olunan, büyüyebilen metindir; &str ise bir metne ödünç bakış. Dönüşümler:

let a: String = String::from("rust");
let b: String = "rust".to_string();
let c: String = "rust".to_owned();
let d: &str = &a;          // deref coercion
let e: &str = a.as_str();
let f: String = format!("{a}-{}", 2024);

&str'den String'e geçiş yeni bellek ayırır; tersi ücretsizdir.

Birleştirme

+ operatörü sol taraftaki String'in sahipliğini alır ve sağda &str ister:

let a = String::from("Merhaba");
let b = String::from("dünya");
let c = a + " " + &b;   // a taşındı, b ödünç verildi
// println!("{a}");     // hata: a taşındı
println!("{c} {b}");

Birden fazla parçayı birleştirirken format! daha okunaklıdır ve hiçbir değeri taşımaz. Var olan bir String'e eklemek için push_str kullanılır.

Uygulama İki çağrı

fn selamla(ad: &str) -> String yaz ve format!("Merhaba {ad}") döndürsün. Onu bir String (&s) ve bir sabit metin ("Can") ile çağır; sonuçları | ile ayırarak yazdır.

Başlangıç kodu

main.rs
fn main() {
    // buraya yaz
}

Örnek çözüm

main.rs
fn selamla(ad: &str) -> String {
    format!("Merhaba {ad}")
}

fn main() {
    let s = String::from("Ada");
    println!("{}|{}", selamla(&s), selamla("Can"));
}

Beklenen çıktı

Merhaba Ada|Merhaba Can

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Bir fonksiyon metni yalnızca okuyacaksa parametre türü ne olmalı?

  • &str Doğru cevap
  • String
  • &String
  • &mut String

Açıklama: &str hem String'den (&s ile) hem sabit metinden kabul eder; &String yalnızca String kabul eder.

2 Ödünç dilim al

Soru
let a = String::from("rust");
let e: &str = a.____();
Cevap
let a = String::from("rust");
let e: &str = a.as_str();

Açıklama: as_str String'in içeriğine &str olarak bakar; kopya yapmaz.

3 İfade ve sonucun türü

Kavram Anlamı
"a".to_string() String
s.as_str() &str
format!("{x}") String (yeni)
a + &b String (a taşınır)

Başlangıç bölümündeki tüm dersler

16 Proje: Yapılacaklar listesi

  1. Görev modeli
  2. Ekleme
  3. Listeleme
  4. İşaretleme
  5. Komut okuma