Neden Kotlin?

Yazılım dünyasında çok sık sorulan bir sorudur. Hangi dili tercih etmeliyim?
2019 Dev Summit’in başlamasını beklerken Youtube canlı chat ekranında developerların genel olarak tartıştığı konu buydu. Kimileri geleneksel bir yaklaşımla Java ile geliştirme yapmaya devam etmek istiyor, diğerleriyse Kotlini oldukça sevmiş, çoktan projelerine dahil etmişlerdi bile.
Bir projede çalışırken hangi dili kullanmanız gerektiği projenin özelliklerine göre çeşitlilik gösterirken, bazen bir dilin eksikliklerini tamamlayan, daha maliyetsiz bir şekilde geliştirme yapmanıza imkan sağlayan başka bir dille karşılaştığınızda bütünüyle bu dili kullanmaya karar verebilirsiniz.
Öncelikle Java hızlı ve güvenilir bir dildir. Ve birçok platformda Java ile uygulama geliştirebilirsiniz. Açık kaynak kodlu ve güçlü bir dildir.

Java’ya alternatif bir dil olarak geliştirilen Kotlin dili ise, JetBrains firması tarafından kurulmuş ve 2012’den bu yana açık kaynak kodludur. Kotlin, official olarak Google’ın desteğini de arkasında aldı ve şu anda oldukça stabil bir dil olduğunu söyleyebiliriz.
Yeni bir dil öğrenmek developera her zaman zor gelmiştir. IOS platformunda geliştirme yaptığım dönemler zaten karmaşık bir dil olan Objective-C yi tam da öğrenmişken Swift’in gelmesiyle yeni bir dile geçiş yapmak angarya gelmişti. Üstelik yeni çıkan bir dil henüz tam anlamıyla şekillenmemişken stabil hale gelinceye kadar her versiyonda çok büyük değişiklikler yapmanız gerekiyor.
Neyseki Java’dan Kotlin’e geçmek o kadar da zor olmadı. Kotlin halen Java’ya convert edilebilen ve syntax olarak çok daha kolay öğrenilebilen bir dil. Ayrıca syntaxı Swift ile de oldukça benzer görünüyor. Bir zamanlar Visual Basic’ten C#’a geçtiğim gibi Java’dan Kotlin’e de hızlı bir şekilde entegre olabildim. O yüzden korkulacak bir şey yok diyebilirim.
Peki Kotlin’i developera sevdiren pratik ve güçlü yönleri nelerdir?

Kotlin, Null safety bir dildir. Bu ne demek? Java’da ilk kodunuzu derleyip çalıştırdığınızda aldığınız o meşhur NullPointerException hatasıyla Kotlin ile geliştirme yaparken karşılaşmanız biraz zordur. Kotlin’de bir değişkenin nullable olduğunu belirtmeden ona null ataması yapamazsınız.
Yani aşağıdaki kod derleme hatası verecektir:
var value: String = "Kotlin"value = null // Hata
Ancak bu değişkenin Nullable olduğunu söylersek sorun kalmayacaktır:
var value : String? = " Kotlin"value = null // OKval value1 = "Kotlin"val value2: String? = nullprintln(value2?.length) // Güvenli olan kullanım value2’nin null olabildiğini bu şekilde belirtmektir.println(value1?.length) // value1 nullable değildir ve burdaki kod anlamsız ve gereksiz olmuş olur.
Ama ben NPE seviyorum diyorsanız da val valuetobeNull = value!!.length diyerek derleyicinizi NullPointerException fırlatmaya zorlayabilirsiniz :)
Tek baş ağrımız NPE miydi? Hayır, Kotlin’in getirdiği diğer bir güzellik ise ClassCastException yerine, eğer casting işleminiz başarılı değilse size null döndürmesidir.
val valueInt: Int? = value as? Int
Ayrıca gereksiz yere casting yapmamızı önlüyor. (Smart casting)
if( mObject is String){
print(mObject.toUpperCase()) // String casting yapmamıza gerek kalmadan mObject objesine String olarak davranıyor.
}

Java’ya göre daha az kod yazıyoruz. Özellikle adapter tasarlarken, Retrofit kullanırken.. Data classlarını daha az zahmetle yazabiliyoruz. Artık getter ve setterlardan oluşan onlarca satırlık data classı yazmaktan kurtuluyoruz.
class Person {
var name: String = “Firuze”
var surname: String = “Gümüş”
val nameSurname: String
get() = name + surname
}
Bir class için primary constructor tanımlamak hiç bu kadar pratik olmamıştı.
class Person(name: String){
val personName = name.toUpperCase()
}
Hali hazırda Java ile yazılmış bir projemiz varsa da bundan sonrası için eklemek istediğimiz kısımları Kotlin’le yazarak devam edebiliriz. Örneğin Instagram ve Trello yazılım ekibi uygulamalarını geliştirmeye devam ederken Kotlin kullandıklarını açıkladılar.
Kotlin multi-platform bir dildir. JVM çalıştırılan tüm cihazlarda kullanılabilir. Ayrıca Kotlin JS ile birlikte front end tarafında da geliştirme yapabilirsiniz. Böylece Android geliştirmede kullanılması yalnızca buz dağının görünen kısmı diyebiliriz.
Bir de iki stringi karşılaştırırken karşımıza çıkan baş belası bir metod vardır, “Equals”. Java ile geliştirme yapmaya ilk başladığı zamanlar iki stringi karşılaştırırken ekrana bakıp nasıl false döndüğünü anlamayıp tüm bildiklerinin yanlış olduğu hissine kapılmayan yoktur heralde. Artık iki stringi kıyaslarken “==” kullanabileceğimiz haberini vermekten mutluluk duyuyorum.
val firuze1 = Person(“Firuze”)val firuze2 = Person(“Firuze”)firuze1 == firuze2 // true
Switch case yerine daha okunabilir olan “When” ifadesini kullanabiliriz.
when (f) {
1 -> print("f nin değeri 1")
2 -> print("f nin değeri 2")
3, 4 -> print("f nin değeri 3 ya da 4")
in 5..10 -> print("f nin değeri 5, 6, 7, 8, 9, ya da 10")
else -> print("f nin değeri 10dan büyük")
}val result: Boolean = when {
mObject == null -> false
mObject is String -> true
else -> throw IllegalStateException()
}
Lambda kullanımı da oldukça şık ve okunabilirliği daha fazla :
val value = { a: Int, b: Int -> a + b }val result = sum(1,2) // result == 3
Bir diğer güzellik ise Kotlin’de secondary constructor tanımlayabiliyor olmamız.
IntelliJ veya Android Studio, dilediğiniz IDE üzerinde geliştirme yapabilirsiniz. İkisini de aynı ekip geliştiriyor. Ve bence oldukça iyiler.

Kotlini bana sevdiren özelliklerden bir diğeri, senkron/asenkron işlemleri çok kolay bir şekilde yönetmemizi sağlayan coroutines yapısı.
Kotlin’in aklıma gelen güzellikleri bunlar. Daha anlatacak çok şey var. Ancak yazımı şimdilik burada noktalıyorum.