# Kotlin
Kotlin, Java sanal makinesi (JVM) üzerinde çalışan ayrıca JavaScript kaynak koduna veya LLVM ile makine koduna derlenebilen, statik tipli bir programlama dilidir. İlk geliştirme Sankt-Peterburg, Rusya merkezli JetBrains programcıları tarafından yapılmıştır. İsmi Kotlin Adası'ndan gelmektedir. Java ile uyumlu sözdizimi olmasa da, Kotlin Java kodu ile birlikte çalışmak üzere tasarlanmıştır. Kotlin, Apple'ın Swift diline benzemektedir.


## Tarihçe.
Temmuz 2011'de JetBrains, JVM için yeni bir dil olan ve bir yıldır geliştirilmekte olan Project Kotlin'i duyurdu. JetBrains lideri Dmitry Jemerov, Scala dışındaki çoğu dilin aradıkları özelliklere sahip olmadığını söylemiştir. Ancak, Scala'nın düşük derleme zamanını apaçık bir eksiklik olarak gösterdi. Kotlin'in belirtilen hedeflerinden biri, Java kadar çabuk derlemektir. Şubat 2012'de JetBrains, projeyi Apache 2 lisansı altında açık kaynak olarak yayınlamıştır.
Kotlin v1.0, 15 Şubat 2016'da yayınlanmıştır. Bu ilk stabil sürümü olarak kabul edilir ve JetBrains bu sürümden itibaren geriye dönük uyumluluk taahhüdünde bulunmuştur.
Kotlin, Google I/O 2017'de resmi bir Android geliştirme dili olarak duyurulmuştur. Java ve C++'tan sonra Android için tamamen desteklenen üçüncü dil oldu.


## Felsefe.
Geliştirme sorumlusu Andrey Breslav, Kotlin'in nesne yönelimli endüstriyel bir dil ve Java'dan "daha iyi bir dil" olarak tasarlandığını söyledi. Ancak hala Java koduyla tamamen birlikte çalışabilir ve şirketler Java'dan Kotlin'e kademeli bir geçiş yapabilir.


## Sözdizimi.
Kotlin değişken bildirimleri ve parametre listelerinin veri türü, değişken adından sonra gelir. Scala ve Groovy'de olduğu gibi, noktalı virgül bir deyim sonlandırıcısı olarak isteğe bağlıdır; çoğu durumda derleyici ifadenin sona erdiğini anlaması için bir satırsonu yeterlidir.


## Anlamsal.
Nesnel tabanlı programlamanın sınıflarına ve metodlarına (Kotlin'de üye fonksiyonları olarak adlandırılır) ek olarak, Kotlin ayrıca fonksiyon kullanımı ile prosedürel programlamayı da destekler. C ve C++'da olduğu gibi, Kotlin programının giriş noktası "main" olarak adlandırılan fonksiyondan, herhangi bir komut satırı argümanı içeren diziler geçer. Perl ve Unix/Linux shell script stili dize enterpolasyonu desteklenmektedir. Ayrıca tür çıkarımı da desteklenir.
Merhaba, Dünya! örneği
fun main(args : Array<String>) {
 val kapsam = "Dünya"
 println("Merhaba, $kapsam!")
Kotlin, null ve null olmayan veri türleri arasında bir ayrım yapar. Tüm null nesneler tür isminin ardından "?" ile bildirilmelidir. Null nesneler üzerinde yapılan işlemler geliştiricilerin özel bakımına ihtiyaç duyar: null kontrolü, değeri kullanmadan önce gerçekleştirilmelidir. Kotlin, geliştiricilere yardımcı olmak için null-safe operatörleri sağlar:
  - ?. (Null şartlı operatörü) muhtemelen boş bir nesnenin bir metoduna veya özelliğine güvenle erişmek için kullanılabilir. Nesne boş ise, metot çağrılmaz ve ifade null olarak değerlendirilir.
  - ?: (Boş birleştirici operatör) çoğu kez Elvis operatorü olarak anılır:
fun merhabaDe(belki : String?, nullDegil : Int) {
 // elvis operatorünü kullan
 val isim : String = belki ?: "yabancı"
 println("Merhaba $isim")
Güvenli navigasyon operatörünün kullanımına bir örnek:
// foo null ise, veya bar() ya da baz() null döndürürse, null döndürülür.
foo ?. bar() ?. baz()


## Araçlar.
  - IntelliJ IDEA, Kotlin için bir eklentiye sahiptir.
  - JetBrains ayrıca Eclipse için eklenti desteği sunmaktadır. 
  - Apache Maven, Apache Ant ve Gradle dahil olmak üzere yayın Java kurulum araçları desteklenir.