Tarihçe: Kotlin, özlü ama katı bir tipli sözdizimine sahip bir dil olarak tasarlandı. Okunabilirliği artırmak ve kod tekrarını azaltmak için güçlü bir type inference (tip çıkarımı) sağlandı.
Sorun: Bazen tip belirtimi gereksiz hale gelir, bu da kodu karmaşıklaştırır. Ancak aşırı tip kısaltmaları, okuyucular için zorluklar yaratır ve derleyici tip çıkarımında başarısız olursa hatalara yol açar.
Çözüm: Type inference, derleyicinin çoğu tipi otomatik olarak inicializasyon veya bağlama dayalı olarak belirlemesini sağlar. Ancak katı tip kontrolü, yine de kodun doğruluğunu denetler.
Kod örneği:
val name = "Kotlin" // String, tip otomatik olarak çıkarıldı var count = 5 // Int, tip otomatik olarak çıkarıldı val items = listOf(1, 2, 3) // List<Int> // Tip belirtimi gereklidir, eğer çıkarım mümkün değilse val callback: (Int) -> Unit = { println(it) }
Ana özellikler:
Kamu bir fonksiyonun dönüş tipini belirtmek mümkün mü?
Hayır, eğer fonksiyon kamu ise, derleyici, arayüzlerin istikrarı ve Java interoperabilitesi desteği için dönüş tipinin açıkça belirtilmesini isteyecektir.
Örnek:
// Hata! public fun compute(x: Int) = x * 2 // Açıkça gerektirir: public fun compute(x: Int): Int = x * 2
val x = null ifadesinin tipi nedir?
Derleyici tip çıkarımında başarısız olacaktır, çünkü null, bağlam olmadan tamsayıya sahip değildir. Tip açıkça beyan edilmelidir:
val x: String? = null
Tip çıkarımı karmaşık generic tipler için zincirleme koleksiyon işleme durumunda çalışabilir mi?
Evet, ancak tip belirsizse (örneğin, map tipleri dönüştürüyorsa), bazen değişken tipini açıkça belirtmek gerekir:
val values = listOf("1", "2").map { it.toInt() } // List<Int>, tip çıkarılacak
Projede tüm değişkenler tip belirtilmeden tanımlanır, bu diğer geliştiriciler veya yeni çalışanlar için kodu anlamayı ve gezinmeyi zorlaştırır.
Artılar:
Eksiler:
Fonksiyonlar içinde değişkenlerin tipleri otomatik olarak çıkarılır, ancak tüm kamu API'lerinde her zaman dönüş tipi ve parametre tipleri açıkça belirtilir.
Artılar:
Eksiler: