Kotlin'in android ekosisteminde resmi dil olarak benimsenmesinin üzerinden 3 yıl geçti. Çoğu geliştirici, bir şeyleri yapmanın yeni yoluna geçiş yapmıştı, ancak bir şekilde hala bu hareketi yapmakta zorlanan bir dizi başka geliştiricinin (java geliştirici) olduğuna inanıyorum.

Bu Java ve kotlin arasında bire bir karşılaştırma değildir, ancak android uygulamaları geliştirirken java'dan kotlin'e geçişi kolaylaştırmaya yardımcı olabilecek ipuçları ve püf noktaları hakkındadır.

Başlayalım...

1-)
variables ( değişkenler )

final String name = "Ahmet";  //represents an immutable  java String

val name = "Ahmet"    //an immutable Kotlin String with type inference
var name = "Ahmet"  //a mmutable Kotlin String with type inference

Evet yukarıdaki kodda kotlin için bir (;) 'e ihtiyacınız olmadığını fark etmişsinizdir. 

2-) Type Inference

Type Inference, bir programlama dilinde bir ifadenin veri türünün otomatik olarak algılanmasını ifade eder. Kotlin, statik yazılmış bir dildir ancak tür çıkarımını da beraberinde getirir, böylece çok gerekli olmadıkça türü açıkça belirtmeniz gerekmez.

Bu, şu ana kadar android'de desteklenmeyen (jdk 10) itibarıyla java'da mevcut olan bir özelliktir.

3-)
void vs Unit

java void, yöntemin kendi türü olmadığında herhangi bir türü döndürmediğini belirtmek için işlevlerde kullanılan bir anahtar sözcüktür. 
Kotlin'de boşluk yoktur, ancak Unit vardır, Tek bir değere sahip tür, java boşluğunun aday olduğu durumlarda bu durumları kullanın. birimi kullanırken return deyimine gerek yoktur. Buradaki fikir, nesnenin içinde hiçbir şey olmasa bile en azından bir nesneyi döndürme işlevlerine sahip olmaktır.

4-) Object vs Any

Java'nın sınıf hiyerarşisinin kökünü temsil eden Nesnesi ve bir türün eksikliğini temsil eden geçersizliği vardır. bu yüzden her sınıfın, geçersiz olmadığı sürece bir üst sınıf olarak Object'e sahip olduğunu söyleyebiliriz.

Aynısı kotlin için de geçerlidir, çünkü Any type, tüm null yapılamayan türlerin süper türünü temsil eder. ancak aşağıdaki temel farklılıklar vardır.

  • Kotlin'deki java'nın tersine, tüm ilkel türler Any'den miras alınır, dolayısıyla örtük kutulamaya ihtiyacınız olmayacaktır.
  • Varsayılan olarak, siz onu null yapılabilir hale getirmedikçe Herhangi biri null değer tutamaz.
  • 5-) new

    Java'da nesnelerin örneklerini oluşturmak için yeni anahtar kelimeyi kullanıyoruz.

    User user = new User();  //java

    Kotlin'deki yeni Anahtar kelimeyi atlayabilir ve bir işlev çağrısında yaptığınız gibi sınıf örnekleri oluşturabiliriz.

    var user = User()  //kotlin

    6-) For loops

    Burada kendi başınıza görmeniz için bir betik sağlayacağım.
    Bu örnek kotlin kodu bir dizge listesi oluşturur ve ardından her birini yeni bir satıra yazdıran liste üzerinde yineler.

    val names = listOf("Anne", "Peter", "Jeff")
    for (name in names) {
        println(name)
    }
    for (x in 0..10) println(x) // Prints 0 through 10 (inclusive)
    
    for (x in 0 until 10) println(x) // Prints 0 through 9
    
    for (x in 0 until 10 step 2) println(x) // Prints 0, 2, 4, 6, 8
    
    for (x in 10 downTo 0 step 2) println(x) // Prints 10, 8, 6, 4, 2, 0

    7-) switch vs when

    when(number) {
        0 -> println("Invalid number")
        1, 2 -> println("Number too low")
        3 -> println("Number correct")
        4 -> println("Number too high, but acceptable")
        else -> println("Number too high")
    }

    Burada da farkedeceğiniz üzere karmaşık bir durum aslında çok fazla yoktur. Yalnızca koşullar artı iki veya daha fazla eşdeğer seçeneği bir virgülle ayırarak gruplayabilirsiniz.

    else bölümü, bir değer döndürdüğünde gerekli olan varsayılandır, aksi takdirde isteğe bağlıdır.

    8-) operator

    Java da dahil olmak üzere birçok programlama dilinde en yaygın tuzaklardan biri, boş bir referansın bir üyesine erişmenin boş bir referans istisnası ile sonuçlanacağıdır. Java'da bu, kısaca NullPointerException veya NPE'ye eşdeğerdir.
    Kotlin'de tür sistemi, null tutabilen referanslar (null yapılabilir referanslar) ve tutamayanlar (boş olmayan referanslar) arasında ayrım yapar. Örneğin, String türünde normal bir değişken null tutamaz:

    fun main() {
        var a: String = "abc" // Regular initialization means non-null by default
        a = null // compilation error
    }
    
    //To allow nulls, we can declare a variable as nullable string, written String?
    
    fun main() {
        var b: String? = "abc" // can be set null
        b = null // ok
        print(b)
    }
    
    //safe calls to nullable variables
    val a = "Kotlin"
    val b: String? = null
    println(b?.length)
    println(a?.length) // Unnecessary safe call

    Bir NPE (nullpointerException) istiyorsanız, buna sahip olabilirsiniz, ancak bunu açıkça istemeniz gerekir ve birdenbire görünmez.

    Boş olmayan onaylama operatörü (!!), herhangi bir değeri boş olmayan bir türe dönüştürür ve değer null ise bir istisna atar.

    //We can write b!!, and this will return a non-null value of b 
    //(e.g., a String in our example) or throw an NPE if b is null:
    
    val l = b!!.length

    Makalemiz burada son bulurken özetlemek gerekirse Java kodlayan arkadaşlar için Kotlin'e geçiş rehberinde temel sözdizilimine genel bir bakıştı. 
    Ayrıca bu haftanın başlarında java 15 piyasaya sürüldü ve kotlin özelliklerinin çoğu şimdi java'da ve bazıları daha da iyileştirildi, bu yüzden bir seçim yapmak size bağlı. Kotlin ile ilgili bir şey, bir şekilde java ve jvm'nin geleceğini tanımlamasıdır.