Kotlin nedir? Kotlinde Değişkenler

İsmail Talha DENGİZ
4 min readMar 1, 2020

Öncelikle Kotlin nedir, Javanın yerini mi aldı, Javayı bitirdi mi, neden Java değilde Kotlin kısaca bunlara değinelim.

Kotlin, 2010 yılında IntelliJ IDEA’nın arkasında yer alan JetBrains şirketi tarafından kurulmuş, açık kaynak, Java Virtual Machine (JVM) üzerinde çalışabilen, JavaScript kaynak koduna compile edilebilen statik bir programlama dilidir. Google tarafından Android geliştirmek için kullanılabilecek resmi bir dil olarak tanıtılmıştır. Kotlin dilini öne çıkaran en önemli etken de Google Şirketinin bu desteğidir.

Kotlini öne çıkaran diğer etkenler ise(tabi sadece bu maddelerle sınırlı değildir):

  • Kotlin, Java kodları ve kütüphaneleriyle uyumlu çalışabilecek şekilde programlanmıştır. Kotlinden Javayı, Javadan Kotlini çağırabilirsiniz.
  • Null Point Exception almazsınız.
  • Nesneye dayalı fonksiyonel bir dildir.
  • Javaya oranla az kod ile çok iş yapabilirsiniz.
  • Sadece Android uygulamalar için değil masaüstü ve web için de kotlini kullanabilirsiniz.

Java artık bitti mi?

Java uzun yıllardır var olan bir dildir ve pek çok platformda kullanılmaktadır. Bu yüzden kotlinin bir anda javanın yerine geçmesi mümkün değildir. Yukarıda bahsettiğimiz ve daha öğreneceğimiz sebepler kotlini sadece biraz daha ön plana çıkarmıştır.

Variables(Değişkenler)

Her programlama dilinde olduğu gibi kotlinde de temel konu değişkenlerdir. Değişkenler veri depolamak için kullanılır. Kotlinde Javada olduğu gibi primitive( Değerleri stack üzerinde tutulan ilkel tiplerdir. Örneğin; int, double, long gibi.) tipler yoktur. Bunun yerine reference(Değerler obje referansı olarak tutulur. String gibi.) tip kullanılır. Normal şartlarda primitive tipler hızlıdır. Bu yüzden primitive ile reference tip arasında performans farkı oluşur fakat bytecode a çevrilme aşamasında gerekli optimizasyonlar compiler tarafından yapılır. Dolayısıyla Java ile Kotlin arasında performans açısından bir fark oluşmaz. Bytecode aşamasında aynı çıktıyı verirler. Değişkenlerin primitive olarak tanımlanması unboxed, reference olarak tanımlanması ise boxed olarak isimlendirilir.

Kotlinde değişken tanımlarken karşımıza val ve var keywordleri çıkmaktadır. val ile değişken tanımlarsak bu bizim değişkenimize atadığımız değeri ilerleyen satırlarda değiştiremeyeceğimiz anlamına gelir. var ile tanımladığımız değişkenler üzerinde ise değişiklikler yapabiliriz.

Numbers (Sayılar)

Her değişken tipi ramde farklı boyutlarda yer tutar. Bu sebeple değişkene değer ataması yaparken maksimum performans almak için doğru değişken tipini kullanmak önemlidir.

  • Byte: -128 ile 127 arasında değer verebildiğimiz değişken tipidir.
  • Short: -32768 ile 32767 arasında değer verebildiğimiz değişken tipidir.
  • Int: -2,147,483,648 ile 2,147,483,647 arasında değer verebildiğimiz değişken tipidir.
  • Long: -9,223,372,036,854,775,808 ile 9,223,372,036,854,775,807 arasında değer verebildiğimiz değişken tipidir.
  • Float-Double: Float ile Double arasındaki fark virgülden sonraki ondalık kısımda tutabildikleri hane sayısıdır. Bu yüzden bir float değişken sanal bellekte 32 bitlik yer tutarken, double türündeki bir değişken 64 bit yer tutacaktır.

Java dilinde değişken tanımlaması yaparken önce değişken tipini yazıp sonrasında değişken adını yazıyorduk. Kotlinde öncelikle değişkenimizin adını sonrasında ise değişken tipimizi yazarız, değişken tipi tanımlanmadığında atadığımız değere göre kendisi tip çıkarımı(type inference)yapar.

Type Conversion(Tip Dönüşümü)

Explicit Conversion(Açık Dönüşüm) ve Implicit Conversion(Kapalı Dönüşüm) olmak üzere iki çeşit tip dönüşümü vardır. Ancak kotlinde Implicit Conversion yoktur. Kotlin sayıların otomatik olarak genişletilmesini desteklemediği için Explicit Conversion kullanılır.

Kotlinde implicit conversion olmasa bile iki farklı değişken tip arasında matematiksel işlem yapılırsa sonuç büyük olanın tipinde olacaktır.

Characters(Karakterler)

Karakterleri Char veri tipi içerisinde tutarız ve tanımlamalarımızı tek tırnak içerisinde yaparız. Harfleri, sayıları, escape karakterleri ve unicode tanımlayabiliriz. Tüm bunlar çift tırnak içerisine yazılırsa char değil String olur.

Sayısal bir Char değişkenini Int bir değişkene çevirirsek elde edeceğimiz sonuç o değişkenin gerçek sayısal değeri değil, ASCII tablosundaki o sayısal değerin karşılığı olacaktır.

Escape Characters

Boolean

True ya da false değer ataması için kullanılır. 0 ya da 1 boolean olarak kullanılamaz. Boolean veri tipi genel olarak koşul belirtirken veya döngülerde kullanılabilir.

String

String değişken tipi aslında char kümesinin bir araya gelmesinden oluşur. Değer ataması yaparken Char tipinden farklı olarak çift tırnak içinde tanımlanır.

Değişkenler + operatörüne ihtiyaç duyulmadan $ işareti ile çift tırnak arasına yazılabilir. Bu yapıya string template denir. Eğer değişkenin bir özelliğine ihtiyaç duyuyorsak ${} şeklinde kullanılmalıdır. 3 tane çift tırnak kullanılarak Raw String oluşturulabilir. Raw Stringler IDEye nasıl yazılıyorsa o şekilde çıktı alınır. Raw Stringler içerisinde escape karakterler çalışmaz.

Arrays(Diziler)

Dizileri çok sayıda veriyi bir arada saklamak için kullanabiliriz. arrayOf() ile aynı tipteki verileri tanımlayabiliriz. Farklı tipteki verileri tanımlamak için arrayOf<Any> şeklinde kullanırız. arrayOfNulls<Type>(size) ile de verilen boyut kadar null değer içeren bir dizi tanımlanabilir.

ByteArray, ShortArray, LongArray, DoubleArray, FloatArray gibi primitive dizi tanımlamaları da yapılabilir. Bu şekilde tanımladığımızda set(index,value) ya da [index]=value şeklinde ilgili index değerine atama yapabiliriz. İlgili indexteki değere ise get(index) ya da [index] şeklinde ulaşabiliriz.

val ile tanımlanmış bir arrayin herhangi bir indexinin değeri değiştirilebilir. val indexteki değerlere karışmaz ancak ilgili diziyi başka bir dizi ile eşitlememize izin vermez. Bunun için var ile değiştirmemiz gerekir.

Nullable Types(Null olabilen Tipler)

Kotlinde bir değişkenin null olma ihtimali varsa belirtmemiz gerekir. Aksi halde IDE hata verecektir. Bunu da değişken tipinin sonuna ? ekleyerek belirtiriz. Bir değişkeni ? ile nullable tip olarak tanımlarsak IDE bu değişkeni direk kullanmamıza izin vermeyecektir. Kullanabilmek için !! operatörünü kullanmamız gerekir. Bunun anlamı da sen null olup olmamasını dikkate alma, ben null olmayacağının garantisini veriyorum, kodu çalıştır demektir. Eğer değişkenimiz null ise bu durumda KotlinNullPointerException hatası alacağız. !! yerine ?. kullanırsak bunun anlamı da kontrolü sen yap null değilse çalıştır demektir.

Kotlinde kontrol yapıları ve döngüler yazısında görüşmek üzere..

İyi çalışmalar :)

--

--