CodeBlanks Logo Icon CodeBlanks

&str ve String farkı

&str ve String türlerinin farkını ve kullanım yerlerini öğrenirsin.

&str ve String farkı

Rust'ta iki ana metin türü vardır. &str (string dilimi) başka bir yerde duran UTF-8 baytlarına ödünç bakan, değiştirilemez bir görünümdür. String ise yığında (heap) duran, sahip olunan ve büyüyebilen metindir.

let sabit: &str = "merhaba";          // programın içine gömülü
let mut sahip: String = String::from("merhaba");
sahip.push_str(" dünya");             // String büyüyebilir

Fonksiyon parametrelerinde genellikle &str alınır; hem &String hem string sabitleri kabul edilir.

Sahiplik farkı

String bir başka değişkene atanınca sahiplik taşınır ve eski değişken kullanılamaz; &str ise kopyalanabilir bir referanstır:

let a = String::from("Go");
let b = a;            // sahiplik b'ye geçti
// println!("{a}");   // derleme hatası: a taşındı
let s1 = "Rust";
let s2 = s1;          // &str kopyalanır, ikisi de kullanılabilir

Bu kural sahiplik dersinde ayrıntılı ele alınacak.

Uygulama Selamla

fn selam(ad: &str) -> String fonksiyonu format!("Merhaba {ad}") döndürsün. Hem selam("Ada") hem let s = String::from("Can"); selam(&s) ile çağırıp iki sonucu yazdır.

Başlangıç kodu

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

Örnek çözüm

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

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

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 hangi parametre türü en esnektir?

  • &mut String
  • Vec<char>
  • &str Doğru cevap
  • String

Açıklama: &String otomatik olarak &str'ye dönüşür (deref coercion); String almak ise çağıranı sahipliği devretmeye zorlar.

2 Sahip olunan metin

Soru
let mut ad = ____::from("Ada");
ad.push_str(" Lovelace");
Cevap
let mut ad = String::from("Ada");
ad.push_str(" Lovelace");

Açıklama: String::from bir &str'den sahip olunan, büyüyebilir bir String oluşturur.

3 Tür ve özelliği

Kavram Anlamı
&str Ödünç, değiştirilemez
String Sahip olunan, büyür
"metin" &'static str
&String → &str Otomatik dönüşüm

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