String dilimleri
- Rust kursu
- Başlangıç
- Ders 54/115
- 4 dk
&str dilimleriyle bir string'in bir bölümüne referans verirsin.
String dilimleri
Dilim (slice), bir koleksiyonun ardışık bir bölümüne referanstır; sahipliği almaz. String dilimi &str türündedir ve bayt aralığıyla alınır:
let s = String::from("merhaba dünya");
let ilk = &s[0..7]; // "merhaba"
let son = &s[8..]; // "dünya"
println!("{ilk} / {son}");Aralık bayt konumlarıdır, karakter değil. "ü" iki bayt yer kaplar; bu yüzden "dünya" 6 bayttır.
Dilim neden güvenli?
Dilim kaynağı ödünç aldığı için, dilim yaşarken kaynak değiştirilemez:
let mut s = String::from("rust dili");
let kelime = &s[0..4];
// s.clear(); // hata E0502: kelime hâlâ kullanılacak
println!("{kelime}");Böylece "kaynağı silinmiş bir parçayı gösteren indeks" hatası derlemede yakalanır. Dize sabitleri ("merhaba") de aslında programın içine gömülü bir &str dilimidir.
Uygulama İki parça
let s = String::from("rust dili"); için &s[0..4] ve &s[5..] dilimlerini al, aralarına | koyarak yazdır.
Başlangıç kodu
fn main() {
// buraya yaz
}Örnek çözüm
fn main() {
let s = String::from("rust dili");
let a = &s[0..4];
let b = &s[5..];
println!("{}|{}", a, b);
}Beklenen çıktı
rust|dili
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 <code>let s = String::from("çay"); let x = &s[0..1];</code> ne olur?
- Derleme hatası
- x = ""
- Çalışma anında panic: 1 karakter sınırı değil Doğru cevap
- x = "ç"
Açıklama: "ç" iki bayttır; 1. bayt bir karakterin ortasına düşer ve dilimleme panic verir.
2 İlk dört bayt
let s = String::from("rust dili");
let ilk = &s[____];
let s = String::from("rust dili");
let ilk = &s[0..4];
Açıklama: 0..4 aralığı 0, 1, 2, 3 baytlarını alır: "rust".
3 İfade ve sonuç
| Kavram | Anlamı |
|---|---|
&s[0..7] |
"merhaba" |
&s[8..] |
"dünya" |
"çay"[0..1] |
Panic |
"dünya".len() |
6 |