Kotlin’e Merhaba!

Google I/O 17’de Kotlin’in Android platformu için resmi dil olarak ilan edilmesinden sonra, eğer daha önce inceleme fırsatı bulamadıysanız, Kotlin dilini incelemenin zamanıdır diye düşünüyorum. Bu yazıda, Kotlin’de genel konseptleri ve çalışma mantığını ele almak istiyorum.

Önce, biraz genel bilgiyle başlayalım, sanıldığının aksine son 1-2 yıldır ismini duyuyor olsak da Kotlin 6 yıllık bir geçmişe sahip. Android Studio’nun üzerine kurulduğu platform IntelliJ Idea’nın da kurucusu olan Jetbrains ekibinin geliştirdiği bir dil.

Java gibi JVM üzerinde çalışan bir dil olması sebebiyle Java ile birlikte aynı projede uyum sorunu yaşamadan geliştirme yapabilirsiniz. Aynı zamanda Google ve Jetbrains ekipleri Kotlin kullanımına destek vermek için hazır ve açıklar. Kotlin’in geliştirilmesi için hali hazırda bir komünite oluşturulmuş durumda, geliştiricilerin dahil olmalarını ve kendilerini bu konuda daha çok geliştirmelerini istiyorlar.

Geleneklere sadık kalıp, Kotlin’de çalışabildiğimizi gösteren Hello World örneği ile başlayalım.

Screen Shot 2017-06-19 at 22.38.11

Java’da olduğu gibi Kotlin’de de projemizde ilk çağrılan fonksiyon main fonksiyonu.

Kod bloğunu incelersek, fonksiyon imzaları Kotlin’de fun keyword’u ile başlıyor, method ismiyle devam ediyor. Parantez içerisinde methodun alacağı argümanlar tanımlanıyor. Java’dan farklı olarak önce argüman ismi, ardından argümanın tipi belirtiliyor, : işareti ile bu bilgiler ayırılıyor.

Konsola değer yazdırmak için print ya da println fonksiyonlarını kullanıyoruz.

Örneği biraz daha genişletip, main fonksiyon üzerinden bir fonksiyon çağırıp, parametrik bir metin yazdıralım.

Screen Shot 2017-06-19 at 22.41.29

Gördüğünüz gibi, printMessageWithParameters fonksiyonu sadece konsola yazı yazılmasını sağlıyor ve geriye herhangi bir değer dönmüyor. Bu nedenle fonksiyonun sonunda parametrelerden sonra : işaretinden sonra Unit ifadesi bulunuyor. Unit‘i java’daki void olarak düşünebiliriz.

Parametre alan stringlerde, parametreler ${ …. } ifadesinin içine yazılıyor. Sadece tek bir değişkenin değeri yazdırılıyorsa, süslü parantezlere { } ihtiyacınız yok. Sadece $ ifadesinin kullanarak ilerleyebilirsiniz.

Aynı zamanda Kotlin’de bir fonksiyon, tek bir ifade içeriyorsa, return ifadesine ve fonksiyon için kullanılan { }‘lere de ihtiyacınız yok. Fonksiyonuzu çalıştıracağı ifadeye eşitleyebilirsiniz. Tıpkı aşağıda yaptığımız gibi.

Screen Shot 2017-06-24 at 18.07.38

Kotlin’de Değişkenler

Kotlin’de değişkenler, tek bir sefer atama yapılan (assign-once / read only) ya da değerini istediğiniz kez değiştirebildiğiniz (mutable) değişkenler olarak iki tiptir. Read only değişkenlerin tanımı için val, mutable değişkenler için var keyword’u kullanılır, değişken isminden sonra : işareti ile tip bilgisi verilip, daha sonrasında değer ataması yapılır. Ancak dilin bir güzelliği, her zaman tip bilgisini vermek durumunda değilsiniz, eğer tanımla birlikte aynı satırda değer ataması yapıyorsanız, Kotlin çıkarım yaparak değişkeninizin tipini anlar. Bir diğer göze alınması gereken durum, eğer değişkeninizi tanımlarken değer vermiyorsanız, tipini belirtmek durumdasınız. Aksi durumda, compiler’dan type required hatası alırsınız.

Bir read only değişken için, değerini hemen atamak durumunda değilsiniz, tanımdan sonra, değeri belli olduğu zaman da atama yapılabilir, ancak sadece bir kere atama yapılması gerektiğine dikkat etmelisiniz.Mutable değişkenler içinse, istediğiniz kadar değer değişikliğine gidebilirsiniz.

val_var2

Gelelim, Kontrol İfadelerine..

If ifadesi

Kotlin’de if koşullarını, Java’da yazdığınız gibi yazabilirsiniz. Ancak, Kotlin’in dile özgü getirdiği bir iki hayat kolaylaştırıcı yenilik mevcut, altta sağdaki ilk kod bloğuna bakarsak, soldaki gibi bir karşılaştırma sonucunda, min değişkeninin değerine karar veriyorsanız, bunu Kotlinle if koşulunu min değişkenine eşitleyerek yapmanız ve min=b, min=a gibi atamaları if/else bloklarında yapmak yerine değeri yazmanız yeterli olacaktır. Aynı zamanda if/else bloğunda sadece atama kararı veriyorsanız bloğunuzun { } işaretlerine ihtiyacı yok, bu işi parantezlerden kurtulup tek satırda da yapabilirsiniz. Yani kısaca, val min = if (a>b) b else a

Peki diyelim ki atama harici işler de yapıyoruz, if /else kod bloklarımızda, o zaman yine if -else ifadesini değişkeninize eşitleyebilirsiniz, son satıra atamayı yapacağınız değere ayırmanız yeterli. (Bknz. 4. kod bloğu)

kotlin_control_flows_if

When ifadesi

Kotlin’de geleneksel switch operatörünün yerini when almış durumda. İyi de olmuş, çünkü switch operatöründen çok daha fazla işlevi var. Aşağıdaki ilk kod bloğunda, gördüğünüz gibi when (x) dedikten sonra, x değişkeninizin hangi değer, hangi aralık içinde ya da dışında hatta ve hatta hangi tipte olduğunu bile when bloğunun içerisinde kontrol edebiliyorsunuz. If koşullarında olduğu gibi when ifadesinde de sonucu herhangi bir değişkene atamak mümkün. When ifadesinde, eğer değer hiçbir koşuluğu sağlamıyorsa, düşeceği kısım else kısmı oluyor ve eğer when ifadesinin sonucunu kullanacaksanız, else kısmını yazmadan kodunuz compiler’dan geçemiyor.

kotlin_control_flows_when

Döngülere geçmeden birşeyden daha söz etmek istiyorum. Yukarda hasPrefix metodunu görüyorsunuz. Any class’ı tipinde, yani herhangi bir tipte olabilecek x değişkenini alıyor ve when koşulundan geçiriyor, eğer String’se ve prefix ifadesi varsa başında, true, değilse false ile result değişkenine değeri atıyor ve sonuç return ediliyor.

Kotlinde, bir fonksiyonda içerde tek bir bloktan dönen değeri direkt olarak gönderiyorsa, result değişkenini tanımlamaya ve return etmeye gerek yok. Direkt olarak when koşulunu hasPrefix metoduna eşitleyebilirsiniz. Tıp son kod bloğunda olduğu gibi.

Döngüler..

For Döngüsü

Kotlin’de üzerinde iterate edilebilen herhangi bir tür üzerinde for döngüsünü çalıştırabilirsiniz. “Üzerinde iterate edilebilen” ifadesinden kasıt üzerinde çalıştınız instance’ın  iterator(), next() ve hasNext() metodlarına cevap veren herhangi bir türe ait olması. Aşağıda, ilk satırdaki gibi, for … in ile sıradaki elemana ulaşarak iterate edebileceğiniz gibi, index’ler üzerinde de ilerleyebilirsiniz. Aynı zamanda, 3. örnekte gördüğünüz gibi (index, value) pairini kullanarak da for döngüsünü işletebilirsiniz.

for item in 0..lastIndex gibi bir ifade kullanarak, belli bir integer aralığında da çalışabilirsiniz.

kotlin_loops_for

Range  – Aralıklar üzerinde çalışmak..

Kotlin aralıklar üzerinde if, when koşullarının ve for döngülerinin çalışmasına olanak sağlayan bir dil. Int değerler ile bir aralık oluşturabileceğiniz gibi, char değerler için de aralık oluşturabilirsiniz. Kotlin artarak giden aralıkları .. ifadesi ile kolayca yaratmanızı sağlıyor. Ancak azalarak giden aralıklar için özellikle downTo metodunu kullanmanız gerekli. Bunun sebebi çok açık, örneğin herhangi bir elemana sahip olmayan bir dizi üzerinde 0..array.size -1 gibi ifade ile ilerlemeye izin verseydi. Java gibi bir dilde IndexOutOfRange hatası alırdınız. Kotlin bu durumda for döngüsünün çalışmamasını sağlıyor.

Aynı zamanda step metodunu kullanarak da belirli aralıklarla iterasyon yapılmasını sağlayabilirsiniz.

kotlin_ranges

Null Kontrolleri

Kotlin dilinin, kısa ve öz kullanım dilinden sonra en sevdiğim 2. özelliği Null kontrolleri. Yazılım dilinde sıklıkla aldığımız Exception’ların başında gelen NullPointerException için kodun yazım aşamasında, compiler kontrol desteği sağlıyor. İlk satırlardaki gibi, eğer bir değer atama yapıldıktan sonra bir değişkeni null’a eşitlerseniz. Kotlin bu değişkeni, null olabilecek bir değişken olarak tanımlamadığınız için compile aşamasında hata veriyor. Peki değişkeniniz null olabilirse ne yapacaksınız? Tanımlarken tip sonrasında ? kullanmanız gerekiyor. sonrasında gönül rahatlığıyla null’a eşitleme yapabilirsiniz.

Kotlin compiler null’a eşitlediğiniz bir değişken üzerinden bir fonksiyona eriştiğinizi farkettiğinde de compile hatası veriyor ve kodunuzu kontrol etmenizi istiyor. Bu kontrolü basitçe x != null gibi bir ifade ile sağlayabilirsiniz sonrasında nullable değişkeniniz normal bir değişkene otomatik olarak cast ediliyor.

kotlin_null_checks

Kotlin dilinde lambda expressions, infix fonkisyon tanımı, extension metodlar gibi bir çok kullanışlı yeni özellik var. Bunların hepsini try.kotlinlang.org üzerinden deneyebilir. Kendi örneklerinizi Kotlin’in web üzerinden sağladığı compiler üzerinde çalıştırabilir ve hesap oluşturup örneklerinizi paylaşabilirsiniz.

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s