Slices: Bellekteki Verinin Bir Parçasına Güvenli Erişim

  • Konbuyu başlatan Konbuyu başlatan irfo
  • Başlangıç tarihi Başlangıç tarihi

irfo

Moderatör
Katılım
7 Ocak 2026
Mesajlar
290
Tepkime puanı
2
Puanları
18
Rust'ta Slices (Dilimler), bir koleksiyonun (dizi, string veya vektör) tamamına değil, sadece belirli bir bitişik parçasına atıfta bulunmanızı sağlayan özel bir referans türüdür. Slices, verinin sahipliğini almaz; sadece bellekteki o bölgeye güvenli bir pencere açar.


1. String Slices (​

Bir String verisinin sadece bir kısmını (örneğin ilk kelimesini) almak istediğinizde, veriyi kopyalayıp yeni bir değişken oluşturmak yerine bir "dilim" oluşturursunuz.

Rust

let s = String::from("Merhaba Dunya");

let merhaba = &s[0..7]; // "Merhaba"
let dunya = &s[8..13]; // "Dunya"
  • &s[0..7] ifadesindeki [başlangıç_indeksi..bitiş_indeksi] yapısı, dilimin sınırlarını belirler. Başlangıç dahil, bitiş hariçtir.
  • Bellek Yapısı: Bir slice aslında bir "fat pointer"dır (şişman işaretçi). Bellekte iki bilgi tutar: Verinin başladığı adres ve dilimin uzunluğu.

2. Slice Aralıkları (Range Syntax)​

Rust, aralıkları belirtmek için kısa yollar sunar:

  • [..5]: Baştan başla, 5. indekse kadar git.
  • [3..]: 3. indeksten başla, sona kadar git.
  • [..]: Tüm koleksiyonu kapsayan bir dilim al.

3. String Literalleri ve​

Şu ana kadar kullandığınız "Merhaba" gibi sabit stringler aslında birer String Slice'tır. Bunlar programın binary dosyasına gömülüdür ve tipleri &str'dir. Bu nedenle değiştirilemezler (immutable).

Altın Kural: Fonksiyon tasarlarken, parametre olarak &String yerine &str kullanmak daha esnektir. Çünkü &str hem String dilimlerini hem de doğrudan string literallerini kabul eder.

4. Diğer Slice Türleri (Dizi Dilimleri)​

Slices sadece stringlere özgü değildir. Diziler (Array) üzerinde de dilimleme yapabilirsiniz.

Rust

let sayilar = [10, 20, 30, 40, 50];

let dilim: &[i32] = &sayilar[1..4]; // [20, 30, 40]

assert_eq!(dilim, &[20, 30, 40]);
Bu dilimin tipi &[i32] şeklindedir. Bellek güvenliği açısından Rust, dilim sınırlarının dışına çıkmanıza izin vermez; bu durum derleme veya çalışma zamanında kontrol edilir.


5. Neden Slices Kullanmalıyız?​

  1. Performans: Veriyi kopyalamaz (Zero-copy). Sadece bir adres ve uzunluk bilgisidir.
  2. Güvenlik: Rust'ın Borrow Checker'ı sayesinde, bir dilim geçerliyken asıl verinin değiştirilmesini veya silinmesini engeller.
  3. Hata Önleme: Verinin senkronizasyonunu sağlar. Örneğin, bir stringin indeksini manuel tutmak yerine dilim kullanmak, string değiştiğinde geçersiz indekse erişme riskini ortadan kaldırır.

Özet​

  • Slice, verinin sahipliğini almayan bir referanstır.
  • &str, string verisinin bir parçasına işaret eder.
  • &[T], bir dizinin bir parçasına işaret eder.
  • Koleksiyonun alt kümeleriyle çalışırken kopyalama yapmadan işlem yapmanızı sağlar.
 
Geri
Üst