Kotlin Dersleri – Kotlin Diziler (Array)

Merhaba Arkadaşlar,
Mobilhanem.com sitemiz üzerinden anlattığımız/yayınladığımız Kotlin Dersleri serimize bu dersimizde Kotlin Diziler kullanımından bahsedeceğiz.

Dizi(Array), aynı tipten(String ,Int, Double ve ya herhangi bir oluşturacağımız Class tipi) çok sayıda veriyi (belirlediğimiz sayıda)  bir arada saklayan veri yapısına dizi(Array) adı verilmektedir.

Neden kullanırız derseniz basit bir örnekle 10 tane sayının ortalamasını alacağız. Dizi kullanmadan bunu 10 tane farklı int değişken tanımlayıp tek tek toplayıp sonra 10’a bölerek bulabiliriz. Fakat bu çok zor bir kullanım ve daha büyük rakamlarda neredeyse imkansız bir hal alabilir. İşte bu sorunu Dizi kullanarak çözebiliriz.

Kotlin Diziler (Dizi Tanımlama)

Dizi’yi val diziAdi = Array(diziUzunluğu){başlangıç değerleri}; şeklinde oluşturabiliriz.

Örnek:

val intArray = Array<Int>(10){0} 
val stringArray = Array<String>(10){""}
val doubleArray = Array<Double>(10){1.0}
val charArray = Array<Char>(10){'A'}
.
.
.

Yukarıda gördüğünüz gibi dizilerin uzunluklarını 10 olarak belirledik ve dizilerin tiplerine göre hepsine başlangıç(initial) değer verdik. Verdiğimiz bu initial değerler oluşturulan dizinin tüm elemanlarına değer olarak verildi.

Not : Burda bilmemiz gereken önemli bir nokta dizinin boyutunu diziyi oluşturduktan sonra değiştiremiyoruz. Ne dizinin boyunu arttırabilir ne de azaltabiliriz. Biz bir diziyi oluşturduğumuz an verdiğimiz uzunluğa göre bellekte yer ayrılıyor ve dizinin uzunluğu hep sabit kalıyor.

Diziye Değer Atama:

Aşağıda diziye değer atamanın 2 farklı yolunu göstereceğim.

1.yol:

 val mobilhanemListe = Array<Int>(8){0}//8 elemanlı Diziyi oluşturduk
 mobilhanemListe[0] = 12 //ilk değerini atadık
 mobilhanemListe[1] = 8//ikinci değerini atadık
 mobilhanemListe[2] = 34
 mobilhanemListe[3] = 19
 mobilhanemListe[4] = 26
 mobilhanemListe[5] = 31
 mobilhanemListe[6] = -5
 mobilhanemListe[7] = 78//son değerini atadık

2.yol 

set() metotu

val mobilhanemListe = Array<Int>(8){0}//8 elemanlı Diziyi oluşturduk
mobilhanemListe.set(0,12)//ilk değerini atadık
mobilhanemListe.set(1,8)//ikinci değeri atadık
mobilhanemListe.set(2,34)
mobilhanemListe.set(3,19)
mobilhanemListe.set(4,26)
mobilhanemListe.set(5,31)
mobilhanemListe.set(6,-5)
mobilhanemListe.set(7,78)

 

Yukarıda oluşturduğumuz mobilhanemListe dizimize değerler atadık. Dikkat ettiyseniz ilk elemana değeri mobilhanemListe[1] ile değilde mobilhanemListe[0]  ve ya mobilhanemListe.set(0,12) şeklinde atadık. Bunun sebebi ise Java’da bir dizideki elemanların sıra numaraları, yani indeksleri 0 dan başlar ve boyutundan 1 eksik olarak biter. Yani 10 elemanlık bir dizinin son elemanına değeri diziAdi[9] = x  şeklinde atayabiliriz. Aşağıda mobilhanemListe dizimizi görüyorsunuz. Gördüğünüz gibi ilk eleman yani 0. indeks 12 değerini tutuyor.

java array indeks

Diziden Değer Okuma

Diziden değerleri diziAdi[indeks]  şeklinde veya diziAdi.get(indeks) şeklinde okuyabiliriz.

println(mobilhanemListe[0]) //0. elemanın değerini yazdırıyoruz. Yani ilk eleman
println(mobilhanemListe[3]) //4. elemanın değerini mobilhanemListe[3] şeklinde yazdırıyoruz.

Konsol Çıktısı:
12
19

veya

println(mobilhanemListe.get(0)) //0. elemanın değerini yazdırıyoruz. Yani ilk eleman
println(mobilhanemListe.get(3)) //4. elemanın değerini mobilhanemListe[3] şeklinde yazdırıyoruz.

Konsol Çıktısı:
12
19

Eğer dizinin belli bir indeksine değer ataması yapmadan okumaya kalkarsak, diziyi oluştururken verdiğimiz başlangıç değerini okuruz.

val mobilhanemListe = Array<Int>(8){5}//başlangıç değeri 5 olan 8 birim uzunluğunda dizi oluşturduk
println(mobilhanemListe.get(2))
println(mobilhanemListe[4])

Konsol Çıktısı:
5
5

Gördüğünüz gibi biz bir atama yapmadan 2. ve 4.indeksin(beşinci eleman) değeri 5 dönmektedir. Bunun sebebi yukarıda diziyi oluştururken başlangıç değeri veriyor olmamızdır.

Bu dersimde birde dizi boyunu öğrenme işleminden bahsedeceğim. Biz bir diziyi oluştuduğumuz zaman o diziye ait size adında bir int değişken(method değil) otomatik olarak oluşur ve dizinin boyunu tutar.

Yukarıdaki mobilhanemListe dizimizin boyutu 8’dir. Bunu aşağıdaki şekilde öğrenebiliriz.

val diziBoyutu = mobilhanemListe.size;
println("Dizi boyutu :"+diziBoyutu);

Konsol çıktısı:
Dizi Boyutu :8

Arkadaşlar birde şundan bahsetmek istiyorum. Kotlin dilinde JVM’eki primitive type’lar için hazırlanmış Özel bulunmaktadır. Bunların farkı bu dizilerde başlangıç(initial) değer vermemize gerek kalmamaktadır ve performans olarak daha hızlı çalışmaktadırlar. Bu dizileri aşağıda sıralıyorum.

  • ByteArray
  • CharArray
  • ShortArray
  • IntArray
  • LongArray
  • BooleanArray
  • FloatArray
  • DoubleArray

Eğer  Byte,Char,Short,Int,Long,Boolean,Float,Double (JVM’deki primitive tipler) tiplerinden bir array oluşturacaksak bu tipler için oluşturulmuş dizileri kullanmamız performans açısından daha iyi olacaktır.

Dizi oluşturma:

val intListe = IntArray(8)
val doubleListe = DoubleArray(5)

Yukarıda gördüğünüz gibi Int ve ya Double bir array oluştururken onlar için özel hazırlanmış dizileri kullandım. Diziye Değer atama ve değer okuma işlemleri ise normal dizilerden bir farkı bulunmamaktadır.

Bu dersimde dizinin temel mantığından, nasıl oluşturulduğundan, nasıl değer atandığından, değerleri nasıl geri alabileceğimizden, başlangıç değerlerinden ve dizinin boyunu nasıl öğrenebileceğimizden bahsettik. Yani kısaca Kotlin’de ve tüm yazılım dillerinde çok önemli bir yapı olan Dizi‘lere giriş yapmış olduk.

Konuyla ilgili yorumlarınızı konu altından yapabilirsiniz, ayrıca sorularınızı yine konu altından ve Mobilhanem Soru&Cevap bölümünden sorabilirsiniz.

Tüm Kotlin Dersleri için tıklayınız.

37

Taha Kırca

iOS & Android & Apple Watch Developer, Mobilhanem.com yazarı, Karadeniz Uşağu, Ordu Sevdalısı

14 Yorum

  • Merhaba, bu 2 satırın sonuna da “;” (noktalı virgül) neden koydunuz?
    Ben koymadan yaptım ve bir sıkıntı olmadı.

    println(mobilhanemListe[0]); //0. elemanın değerini yazdırıyoruz. Yani ilk eleman
    println(mobilhanemListe[3]); //4. elemanın değerini mobilhanemListe[3] şeklinde yazdırıyoruz.

    Konsol Çıktısı:
    12
    19

    • Noktalı virgüller Java’dan gelen alışkanlıklar. Noktalı virgül kullanmanda herhangi bir sakınca yoktur ama Kotlin dili ihtiyaç duymadığı için noktalı virgüllere kullanmanın bir mantığı yoktur. Bende dersten kaldırıyorum.
      Ama dediğim gibi kullanman bir hataya sebep olmaz.

  • Merhaba,

    val intArray = Array(10){0}
    val stringArray = Array(10){“”}
    val doubleArray = Array(10){1.0}
    val charArray = Array(10){‘A’}

    Bu kod örneğinden yararlanarak kendim farklı bir array oluşturdum:

    fun main (args: Array) {

    val OkulNumaralarım = Array(3) {0}
    OkulNumaralarım[0] = 246
    OkulNumaralarım[1] = 722
    OkulNumaralarım[2] = 1505

    print(OkulNumaralarım[2])

    } Burada ” {0} ” ifadesinin ne işe yaradığını anlayamadım. Yazınızda “Başlangıç Değeri” olarak geçen yer.)
    Ben de kod üzerinde oynayarak oluşacak değişikliklere göre bir anlam çıkarırım diye düşündüm lakin {0} yerine {5} de yazsam hatta {789} bile yazmama rağmen harhangi bir error almadım. O kısım ne işe yarıyor acaba izah edebilir misiniz?

    Teşekkürler.

  • Dizi değişkenleri val ile tanımlanmış yani immutable olması gerekirken neden tekrar atama yapılınca hata vermiyor?

    • val konusunu ilerleyen derslerde (object nedir , mutable object nedir , immutable object nedir) konularına gelince tekrardan anlatacağız. val ile tanımlanan referans immutable ‘dır diyemeyiz , sadece başka bir objeye bağlanamaz.
      val mobilhanemListe = Array(8){0}
      mobilhanemListe = Array(3){5} //yeni Array yaratıp atama yapmaya çalıştığın zaman hata verecektir. Yani val keywordu ile tanımladığın referans başka bir objeye bağlanma şansı bulunmamaktadır. Ama bağlandığı objedeki değerleri değişmektedir. Bunu derslerimizde bu şekilde anlatamadık çünkü yeni başlayan arkadaşlar object nedir , mutable object nedir ,immutable object nedir konularına uzaklar. Bu konuları anlattıktan sonra tekrardan val , var konusuna değineceğiz.

  • Array e neden başlangıc değeri veriyoruz C de vermeden yapabiliyoruz Kotlinde de vermesek sorun olur mu?

    • C de derleyici dizi için yer ayırırken ayırdığı yerde ne varsa daha önceden o değeri atama yapıyor. Eğer dizi elemanlarına atama yapmadan dizi değerine ulaşmak istersek bir çeşit çöp değere ulaşmış oluyuruz. Sanırım bu hatayı ortadan kaldırmak için başlangıçta değer veriliyor.

    • Geçersin olan ne? Geçerli her şey… Taha reis eline sağlık bu arada kotlin hakkındaki yazıların güzel.Ama örnek sayılarını biraz daha fazla artırsan daha güzel olur bence.

Haftalık Bülten

Mobilhanem'de yayınlanan dersleri haftalık mail almak ister misiniz?