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ğinizdeString::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 birchar
’ın bir insanın “karakter” olarak kabul edeceği şeyden farklı olabileceğini unutmayın.- İnsanlar dizelerden (strings) bahsettiğinde, ya
&str
ya daString
’den bahsediyor olabilirler. - Bir tür
Deref<Target = T>
’yi gerçekleştirdiğinde (implement), derleyiciT
’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 şekildestr
’nin metotlarına erişim sağlar.let s3 = s1.deref();
velet 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şlemString
’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ğus3.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.