Dilimler (Slices)
Bir dilim (slice) size daha büyük bir koleksiyonun içinden bir görüntü verir:
fn main() { let a: [i32; 6] = [10, 20, 30, 40, 50, 60]; println!("a: {a:?}"); let s: &[i32] = &a[2..4]; println!("s: {s:?}"); }
- Dilimler (slice), dilimlenmiş türden verileri ödünç alır (borrowing).
-
a’yı ödünç alıp (borrowing) başlangıç ve bitiş indekslerini köşeli parantez içinde belirterek bir dilim (slice) oluşturuyoruz. -
Dilim (slice) indeks 0’da başlıyorsa, Rust’ın aralık sözdizimi (range syntax) başlangıç indeksini kullanmamaya izin verir; bu,
&a[0..a.len()]ve&a[..a.len()]dilimlerinin aynı olduğu anlamına gelir. -
Aynı şey bitiş indeksi için de geçerlidir, dolayısıyla
&a[2..a.len()]ve&a[2..]aynıdır. -
Tüm bir dizinin dilimini (slice) kolayca oluşturmak için
&a[..]’ı kullanabiliriz. -
s,i32’lerin bir dilimine (slice) referanstır.s(&[i32]) türünün artık dizi uzunluğundan bahsetmediğine dikkat edin. Bu bize farklı boyutlardaki dilimler üzerinde hesaplama yapmamızı sağlar. -
Dilimler (slice) her zaman başka bir nesneden ödünç alır (borrow). Bu örnekte
a’nın en azından dilimimiz (slice) kadar ‘canlı (alive)’ (kapsamında) kalması gerekiyor. -
Bir dilimi (slice) oluşturduktan sonra onu “büyütemezsiniz”:
- Dilim (slice), destekleyici arabelleğe (backing buffer) sahip olmadığından, dilimin öğelerine ekleyemezsiniz.
- Bir dilimi (slice), destekleyici arabelleğin (backing buffer) daha büyük bir bölümüne işaret edecek şekilde büyütemezsiniz. Bir dilim, temel arabelleği (underlying buffer) uzunluğu hakkında bilgi içermez ve bu nedenle dilimin ne kadar büyütülebileceğini bilemezsiniz.
- Daha büyük bir dilim (slice) elde etmek için, orijinal arabelleği (buffer) kullanarak daha büyük bir dilim (slice) oluşturmalısınız.