String

String türü, büyüyebilir, UTF-8 olarak kodlanmış bir dizedir (string):

fn main() {
    let mut s1 = String::new();
    s1.push_str("Merhaba");
    println!("s1: uzunluk = {}, kapasite = {}", s1.len(), s1.capacity());

    let mut s2 = String::with_capacity(s1.len() + 1);
    s2.push_str(&s1);
    s2.push('!');
    println!("s2: uzunluk = {}, kapasite = {}", s2.len(), s2.capacity());

    let s3 = String::from("🇹🇷");
    println!("s3: uzunluk = {}, karakter sayısı = {}", s3.len(), s3.chars().count());
}

String, Deref<Target = str> özelliğini gerçekleştirir (implement), bu da bir String üzerinde tüm str metotlarını çağırabileceğiniz anlamına gelir.

This slide should take about 5 minutes.
  • String::new yeni bir boş dize geri döndürür, dizeye ne kadar veri eklemek istediğinizi bildiğinizde String::with_capacity kullanın.
  • String::len, String’in bayt cinsinden boyutunu geri döndürür (bu, karakter cinsinden uzunluğundan farklı olabilir).
  • String::chars, gerçek karakterler üzerinde bir adımlayıcı (iterator) geri döndürür. yazıbirim (grapheme) kümeleri nedeniyle bir char’ın bir insanın “karakter” olarak kabul edeceği şeyden farklı olabileceğini unutmayın.
  • İnsanlar dizelerden (strings) bahsettiğinde, ya &str ya da String’den bahsediyor olabilirler.
  • Bir tür Deref<Target = T>’yi gerçekleştirdiğinde (implement), derleyici T’den metotları şeffaf bir şekilde çağırmanıza izin verir.
    • Deref özelliğini (trait) henüz tartışmadık, bu yüzden bu noktada bu çoğunlukla dokümantasyondaki kenar çubuğunun yapısını (neden String türünün altında str metodlarının da görüldüğünü) açıklar.
    • String, Deref<Target = str> özelliğini gerçekleştirir (implement) ve bu ona şeffaf bir şekilde str’nin metotlarına erişim sağlar.
    • let s3 = s1.deref(); ve let s3 = &*s1; yazıp karşılaştırın.
  • String, bir bayt vektörü etrafında bir sarmalayıcı (wrapper) olarak gerçekleştirilmiştir (implement), vektörlerde desteklenen birçok işlem String’de de desteklenir, ancak bazı ek garantilerle.
  • Bir String’e erimenin farklı yollarını karşılaştırın:
    • i’nin sınırlar içinde veya dışında olduğu s3.chars().nth(i).unwrap() kullanarak bir karaktere erişmek.
    • Bu dilimin (slice) karakter sınırlarına denk gelip gelmediği durumlarda s3[0..4] kullanarak bir alt dizeye erişmek.
  • Birçok tür, to_string metodu ile bir dizeye dönüştürülebilir. Bu özellik (trait), Display’i gerçekleştiren (implement) tüm türler için otomatik olarak gerçekleştirilir, bu nedenle biçimlendirilebilen (format) her şey bir dizeye de dönüştürülebilir.