Kotlin Programala Dili Nedir ve Nasıl Öğrenilir?

Kotlin programlama dili JetBrains tarafından 6 yıl önce  üzerinde çalışılmaya başlanmış, Java Sanal Makinesi (JVM), java bytecode‘larını hafızaya yükleyip çalıştırabilen bir programala dilidir. Eğer derleyiciniz programlama dilinizi alıp JVM’in anlayacağı bytecode’a çevirebilirse yazdığınız programlar sanal makine üzerinde çalışabilir. Peki neden JVM’e ihtiyaç duyarız? JVM bize şunları sunar:

  • Garbage Collection : Dinamik hafıza yönetimi sayesinde kullanılmayan instance’lar, yani çöpler, garbage collector tarafından temizlenir.
  • Write Once Run (almost) Every Where : Her platform için farklı bir sanal makine olduğu için bytecode’a çevrilen programınız Windows, Mac, Linux farketmeksizin aynı şekilde çalışacaktır.
  • Performance & Robustness : JVM’in (reference implementation) 20 yıllık bir geçmişi var ve yıllardır finans, telekom, online alışveriş, oyun gibi bircok alanda kullanılıyor. Uygulamanızın karakteristiğine göre farklı JVM’ler kullanabilirsiniz.
    • HotSpot, Reference Java VM implementation
    • Open JDK, free & open JVM implementation
    • Realtime JVMs
  • Monitoring tools : Sanal makinenin durumunu izlemek için ve daha performanslı çalısmasını sağlamak için birçok araç mevcut. VisualVM, JProfiler, GCViewer, jmap, jstack bunlardan sadece bazıları.

JVM’in bedavadan yukarıdaki özellikleri sunması JVM üzerinde calisabilen Java’dan baska birçok dilin doğmasına yol açmıştır. Popupler JVM dillerinden bazıları : Kotlin, Clojure, Scala, JRuby, Jython, Groovy, LuaJ.

Şimdi tekrar Kotlin’e geri dönelim. Kotlin’in öğrenmeye değer bir programlama dili olduğunu düşünüyorum çünkü;

1. Statically Typed

Kotlin, statically typed bir programlama dilidir. Kotlin compiler (kotlinc) Kotlin ile yazdığınız kaynak kodlarını java byte code’a çevirir. Tipler derleme sırasında belirlidir. Ornegin bir değişkenin tipi String ise o değişkene Integer atayamazsınız, compiler buna izin vermez. Static (Java, C#, C++) ve dinamik (Javascript, Python) programlama dilleri ile çalışmış birisi olarak kişisel tercihim statik diller. Çünkü :

  • Static dillerde compiler’lar, kodunuzdaki hataları kodunuz daha çalışmadan (production’a gitmeden) söyleyebilir.
  • IDE’ler tipleri bildikleri için size daha gelişmiş öneriler sunabilir. Çok gelişmiş refactoring desteği sağlayabilirler.

2. Kotlin, Java ile Uyumlu Çalışabilir (Interoperable)

Kotlin’den Java’yı ve Java’dan Kotlin’i çağırmak mümkün. Bu iki farklı dünya arasındaki haberleşme o kadar pürüzsüz ki kullandığınız library’nin Java ile mi yoksa Kotlin ile mi yazıldığını anlamanız mümkün değil. İki dilin uyumu, mevcut java projelerimizin yeni özelliklerini Kotlin ile geliştirme imkanı veriyor.

Java çok popüler bir programala dili olduğu için her ihtiyaca göre yazılmış kütüphaneler bulmak çok kolay (3rd party jars). Kotlin ile yazdığınız kodlar bu kütüphanelerin hepsini kullanabilir. Örneğin:

import org.apache.commons.io.FileUtils
import java.io.File

...

  val file = File("project.properties")
  val fileContent = FileUtils.readLines(file, "UTF-8")
  println(fileContent)

...

3. Kotlin ile Güvendesiniz. Elveda NPE!

Kotlin’de Nullable ve Non-Null Type sistemin bir parçasıdır. Bu sayede Kotlin compiler null olabilecek referanslar ile asla null olamayacak referansları ayırt edebilir.

var s:String = null // Hata !!
//Compiler der ki : null can not be a value of a non-null type String

Bir değişkene null referans atamak isterseniz tipin sonuna ? (soru işareti) eklemeniz gerekir. Örneğin String? nullable string demektir ve Kotlin icin String ve String? birbirinden farklı iki tiptir.

var s:String="test"
var s1:String? = null
s=s1 // Hata !!
//Compiler der ki: error: type mismatch: inferred type is String? but String was expected

Kotlin official dokümantasyonunda null reference’tan Billion dolar mistake olarak bahsediliyor. Kotlin type sistemi daha detaylı bir yazıyı hakediyor. Bu yazıda daha fazla detaya girmeyeceğim. Bu linkte daha detaylı bilgi var.

4. Kotlin ile Daha Az Satır Kod

Yazılım projelerinin büyüklüğü (kodların satır sayısı) ile projelerdeki hata (bug) sayısı arasında doğru orantı olduğunu düşünüyorum. Yani ne kadar çok kod o kadar çok hata.

Kotlin ile aynı şeyleri Java’ya göre daha az satır kod yazarak ifade edebiliriz. Aşağıdaki özellikleri sayesinde Kotlin, Java’ya göre daha öz (concise) bir dildir.

  • Type inference
  • Extension method
  • Lambda function
  • Data class
  • Operator overloading

Kotlin bu özelliklerin hiç birisini sıfırdan icat etmedi. Java programcılarının yıllardır gıpta ile baktığı dillerdeki iyi özellikleri JVM’e taşıdı. Bu blog’a yukarıdaki maddelerin herbiri için ayrı birer yazı ekleyeceğim için şimdilik bunlar ile ilgili detaya girmiyorum.

5. Kotlin ile Android Uygulaması Yazabiliriz

Kotlin compiler Java 6 uyumlu bytecode üretir. Bu sayede Kotlin ile Android uygulamaları geliştirmek mümkün. (PeakGames’te java ile geliştirdiğimiz oyunlara yeni özellikler eklerken Kotlin kullanıyoruz.)

Kotlin’in Android ile ilgili planlarına bu linkten ulaşabilirsiniz. Özetle:

  • Kotlin standart library’nin metod sayısını azaltmaya çalışıyorlar. Bildiğiniz gibi Android uygulamalarında (multi dex kullanmıyorsanız) 64K metod sayısı limiti var. Bu yüzden APK’nin içine girecek kütüphanelerin metod sayısı onemli. Ben bu yazıyı hazırlarken metod sayısı toplam 7191’di : Kotlin Standart Library 6289, Kotlin Runtime 902.
  • Gradle build’lerinde incremental compilation destekleniyor. Bu sayede sadece değişen sınıflar ve değişen sınıfları kullanan sınıflar derlendiği için build süreleri kısalıyor.
  • Jack & Jill ve Instant Run özellikleri henüz tam anlamıyla desteklenmiyor. Fakat roadmap’te var.

6. IDE Desteği

JetBrains tarafından geliştirilen bir programlama dili olduğu için IntelliJ Idea Kotlin desteği ile beraber geliyor. Ayrıca Eclipse’ten vazgeçemeyenler için de Eclipse plugin mevcut. Yeni Android Studio’nun 3.0 ile direk Kotlin desteği IDE’ye eklenmiştir.

Kotlin’i Nasıl Öğrenebilirim?

Buraya kadar okuduysanız Kotlin’i denemeye hazırsınız demektir. Java bilen bir yazılımcı için Kotlin öğrenmek gerçekten cok kolay. Kotlin öğrenmeye başlamak için JetBrains tarafından hazırlanan referans dokümanları bence yeterli.

Okuyarak değil de uygulayarak daha iyi öğreniyorum diyenler için de Kotlin Koans var. Kotlin Koans, içinde birçok geçmeyen (failing) unit test olan bir open source proje. Buradaki unit testleri geçer (yeşil) hale getirmeye çalışarak da Kotlin öğrenebilirsiniz. Bu github repo’sunda benim Kotlin-Koans çözümlerim var.

Son olarak

2017’nin Mayıs ayında geliştirilen Google I/0 2017 konferansında gerçekleştirdiği duyuruyla Android’de uygulamaların geliştirilebilmesi için Kotlin’e destek verilmeye başladı. Kotlin complier Java 6 uyumlu bytecode üretmekte olduğunu belirtmiştik. Bu sayede Kotlin’i kullanarak Android uygulamalar geliştirmek zaten mümkündü. Google’ın desteğini arkasına almasıyla birlikte Kotlin artık birincil tercih sebeblerinden biri haline geldi.

Yani, artık Java ve Kotlin bilen geliştiriciler her iki dili birden kullanarak veya tek başına Kotlin’i kullanarak mobil uygulamalar geliştirebilirler. Kotlin’i kullanmak için geliştiricilerin ekstradan bilgisayarına herhangi bir şey indirmesine de gerek yok. Bilgisayarınızda Android Studio’nun 3.0 sürümünün olması, Kotlin ile Android uygulamalar geliştirmeye başlamanız açısından yeterlidir.

Kotlin Dersleri

Eğer hali hazırda Java programlama dilini bilen bir geliştiriciyseniz, kendinizi Kotlin’e adapte etmek çok daha kolay olacaktır. Kotlin’in arakasındaki geliştirme ekibi olan JetBrains’in Kotlin’e geçiş için hazırladığı referans kaynakları ve kılavuzları gözden geçirmeniz yeterli olacaktır.

Eğer Java bilmiyorsanız ve Kotlin ile de ilk defa tanışacaksanız o halde buraya tıklayarak yine JetBrains tarafından hazırlanan İngilizce eğitim bölümüne erişebilir ve bu bölümdeki makalelerle Kotlin derslerine erişebilirsiniz.

Okumaktan ziyade bir programlama dilinin pratiklerle öğrenilebileceğini düşünenlerdenseniz, JetBrains’in hazırladığı Kotlin Koans eğitimini de gözden geçirebilirsiniz. Kotlin, yeni yayılan bir programlama dili olması nedeniyle bunlar dışında henüz internet dünyasında pek bir kaynak yok ancak ilerleyen zamanlarda internet dünyasının hemen her yerinde Kotlin için daha fazla ders bulabilmeniz mümkün olacaktır.

Kotlin öğrenmek için aşağıdaki linkleri de kontrol edebilirsiniz.


Kaynaklar: 

  • http://ilkinulas.github.io/development/kotlin/2017/01/28/Neden-Kotlin.html
  • WMAracı