Diziler

fn main() {
    let mut a: [i8; 5] = [5, 4, 3, 2, 1];
    a[2] = 0;
    println!("a: {a:?}");
}
This slide should take about 5 minutes.
  • Diziler ayrıca kısaltma sözdizimi (shorthand syntax) kullanılarak da ilklendirilebilir, örneğin [0; 1024]. Bu, tüm elemanları aynı değere başlatmak istediğinizde veya manuel olarak başlatılması zor olan büyük bir diziniz varsa yararlı olabilir.

  • Bir [T; N] dizi türünün değeri , aynı T türdeki N (derleme zamanı sabiti) öğelerini/elemanlarını tutar. Dizinin uzunluğunun türünün parçası olduğuna dikkat edin, bu da [u8; 3]' ve '[u8; 4] dizilerinin iki farklı tür olarak kabul edildiği anlamına gelir. Dilimler (slices), ki çalışma zamanında belirlenen bir boyuta sahiptir, daha sonra ele alınacaktır.

  • Sınırların dışında (out-of-bounds) bir dizi (array) elemanına erişmeyi deneyin. Derleyici, indeksin emniyetsiz (unsafe) olduğunu belirleyebilir ve kodu derlemez:

fn main() {
    let mut a: [i8; 5] = [5, 4, 3, 2, 1];
    a[6] = 0;
    println!("a: {a:?}");
}
  • Dizi erişimleri çalışma zamanında kontrol edilir. Rust genellikle bu kontrolleri optimize edebilir; yani, derleyici erişimin güvenli olduğunu kanıtlayabilirse, daha iyi performans için çalışma zamanı kontrolünü kaldırır. Bu kontroller, unsafe Rust kullanılarak da atlanabilir. Optimizasyon o kadar iyidir ki, çalışma zamanı kontrollerinin başarısız olduğu bir örnek vermek zordur. Aşağıdaki kod derlenecektir ancak çalışma zamanında panik (panic) ile sonuçlanacaktır:
fn get_index() -> usize {
    6
}

fn main() {
    let mut a: [i8; 5] = [5, 4, 3, 2, 1];
    a[get_index()] = 0;
    println!("a: {a:?}");
}
  • Dizilere değer atamak için değişmezleri (literals) kullanabiliriz.

  • println! makrosu ? biçim (format) parametresiyle hata ayıklama gerçekleştirimini/uyarlamasını (implementation) ister: {} varsayılan çıktıyı verir, {:?} hata ayıklama çıktısını verir. Tamsayılar (integer) ve dizeler (string) gibi türler varsayılan çıktıyı uygular (default output), ancak diziler (arrays) yalnızca hata ayıklama çıktısını (debug output) uygular. Bu, bahsi geçen kodda hata ayıklama çıktısını kullanmamız gerektiği anlamına gelir.

  • # eklemek, örneğin {a:#?}, okunması daha kolay olabilecek “güzel yazdırma (pretty printing)” biçimini (format) çağırır.