Kotlin ile Diziler

Merhaba arkadaşlar bu yazıda her programlama dilinde bulunan ve çok fazla veriyle çalışmamızı sağlayan dizi kavramı hakkında bilgi vereceğiz. Diziler, aynı veri tipinde birden fazla veri depolayabilen ve neredeyse tüm programcılar tarafından yaygın olarak kullanılan en temel Veri Yapılarından biridir. Temel bir veri yapısı olduğu için her programlama dilinde kullanılır.

Amacımız dizinin ne olduğunu, kullanım amaçlarını ve bu veri yapısıyla çalışmak için bilmemiz gereken sınıf ve metotları sizlere sunmaktır. O zaman hadi başlayalım!

Dizi Kavramını Anlamak

Değişkenler veriler ile çalışmamızı sağlayan sembolik ifadelerdi. Sembolik ifade string bir veridir. Biz buna değişken ismi diyoruz. Bu isimleri kullanarak değişkendeki veriye erişebiliriz. Değişkenler sadece tek bir veri tutabilir. Ancak kodlamada bu durum pek te pratik değildir. Çünkü kodlamada bir veya birkaç tane değil bazen yüzlerce veri üzerinde işlem yapmak gerekebilir. Böyle bir durumda değişkenler bize faydadan ziyade zarar verir. Çünkü 100 tane veri ile çalışmak için mecburen farklı 100 değişken oluşturmak zorunda kalırız. Bunlara isim bulmak bile tam bir kabustur. Peki bu programcılık mantığına uyar mı? Kesinlikle uymaz çünkü programcılıkta esas kaide en az kod ile bir işlemi yapabilmektir. Aynı işlemi yapan 100 satırlık ve 10 satırlık iki farklı kod bloğunda 10 satırlık kodu kullanmak her zaman için tercih edilir. İşte kod sayısını indirgemek ve karışıklığı önlemek için diziler bu gibi durumlarda yardımımıza koşar.

Dizi ve değişken arasındaki farkı anlamak için önce değişken kullanarak 5 farklı değer tutabilen 5 farklı değişken oluşturalım.

fun main(args: Array<String>) {
    var n1 = 15
    var n2 = 8
    var n3 = 13
    var n4 = 25
    var n5 = -12    
}

Biz burada 5 değişken tanımladık. Ancak bu sayı dediğimiz gibi bazen yüzleri binleri bulabilir. Farkı anlamak için küçük bir uygulama ile hareket etmek daha iyi olacaktır. Bu kodumuzu çalıştırdığımızda değişkenler aşağıdaki gibi RAM bellekte oluşur.

RAM bellekte bulunan bu değişkenlere erişebilmek için n1, n2, n3, n4 ve n5 değişken isimlerini kullanmak gerekir. Eğer bu sayı yüzleri veya binleri bulursa ortaya çıkacak karmaşayı hesap etmek pek te zor değil.

Şimdi bu değişkenleri ekrana tek tek yazdıralım.

fun main(args: Array<String>) {
    var n1 = 15
    var n2 = 8
    var n3 = 13
    var n4 = 25
    var n5 = -12

    println("n1: $n1")
    println("n2: $n2")
    println("n3: $n3")
    println("n4: $n4")
    println("n5: $n5")
}

Kodu incelerseniz sadece yazdırmak için beş adet println() komutu yazmak zorunda kaldık. Eğer 100 tane değişken olsaydı bu kez de 100 tane de println() komutu kullanmamız gerekirdi. Görüleceği üzere çok fazla veri ile çalışmak zorunda kaldığımızda değişkenler bize yardımdan ziyade zarar vermektedir.

Şimdide bu işlemi dizileri kullanarak nasıl yapabiliriz gösterelim. Öncelikle bir dizi oluşturalım ve yukarıdaki değerleri verelim. Dizi oluşturmak için Array sınıfını kullanacağız.

fun main(args: Array<String>) {

    var numbers = arrayOf(15,8,13,25,-12)

}

Kodu incelediğimizde değişken sayısının bire düştüğü görülür, ayrıca tüm veriler bu değişkene atanmıştır. Bu gerçekten çok ilginç. Çünkü bir önceki kodumuzda değişkenleri kullandığımızda beş farklı değişken oluşturmuştuk. Ancak burada aynı işlem için tek bir değişken ismi yeterli olmuştur. Bir önceki uygulama için değişkenlerin RAM bellekte nasıl tutulduğunu çizmiştik. Şimdi de aynı işlemi diziler için yapalım ve bakalım arada fark var mı?

Resmi incelerseniz göze çarpan ilk değişiklik her sayının üstünde ilgili sayıya erişmek için kullanılan isimler olmuştur. Değişkenler için n1, n2, n3, n4 ve n5 isimleri verilere erişmek için kullanılırken, burada numbers[0], numbers[1], numbers[2], numbers[3] ve numbers[4] isimleri kullanılmıştır. Ayrıca tüm değerlerin numbers isimli değişken ile temsil edildiğine dikkat etmekte fayda var. Bu da fark edilmesi gereken diğer bir değişikliktir.

Peki resimdeki isimleri kullanarak gerçekten verilere erişebilir miyiz? Bu sorunun cevabı aşağıdaki kodumuzda bulunmaktadır.

fun main(args: Array<String>) {
    
   var numbers = arrayOf(15,8,13,25,-12)
    
    println("numbers[0]:"+numbers[0])
    println("numbers[1]:"+numbers[1])
    println("numbers[2]:"+numbers[2])
    println("numbers[3]:"+numbers[3])
    println("numbers[4]:"+numbers[4])
}

Uygulamayı çalıştırdığımız zaman ekran çıktısı aşağıdaki gibi olur.

Ekran çıktısı

Kodu incelediğimizde beş adet println() komutunun olduğu görülür. Esasen diziler ile çalıştığımız zaman bu yapıyı pekte kullanmayız. Burada şunu göstermek istedik; resimde verilen isimler ile ilgili verilere erişim sağlanabiliyor.

Eğer kodumuzu daha kısaltmak istersek bu durumda aşağıdaki gibi değişiklik yapmalıyız.

fun main(args: Array<String>) {

    var numbers = arrayOf(15,8,13,25,-12)

    for (index in 0..numbers.size -1) {

        println("numbers[$index]:" + numbers[index])

    }
}

For döngüsünü kullandığımız için kodumuz bir hayli kısaldı. Burada verilen size komutu ile dizinin eleman sayısı elde edilir. Ayrıca for döngüsündeki range yani aralık, sıfır ile dizi uzunluğunun bir eksiği arasındadır.

Diziler ile ilgili bilmeniz gereken temel bazı kurallar var. Şimdi bunlardan bahsedelim.

  • Dizilerde bulunan verilere erişmek için index numarası kullanılır.
  • Dizideki her elemanın bir index numarası vardır.
  • Dizi index numaraları her zaman ve her yerde sıfırdan başlar.
  • Dizideki ilk elemana ulaşmak için sıfır index numarası kullanılır.
  • Dizinin son elemanına erişmek için kullanılması gereken index numarası dizinin eleman sayısının bir eksiğidir. Yani 10 elemanlı bir dizide 10. elemana erişmek için index numarası olarak 9 kullanılır. Dizi 100 elemanlı ise bu durumda index numarası olarak 99 kullanılır.
  • Dizideki elemanlar aynı tipte olmalıdır (String, Int, Double veya Char).

Diziler ile ilgili bilmeniz gereken diğer bilgileri uygulamalar geliştirirken tek tek anlatacağız.

**Bana en büyük desteğiniz yazılarıma yorum yapmanız ve paylaşmanızdır.