&str ve String farkı
- Rust kursu
- Başlangıç
- Ders 19/115
- 4 dk
&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üyebilirFonksiyon 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ılabilirBu 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
fn main() {
// buraya yaz
}Örnek çözüm
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
let mut ad = ____::from("Ada");
ad.push_str(" Lovelace");
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 |