Kotlin, Java'ya kıyasla daha büyük bir esneklik sağlayan varsayılan değerleri (default arguments) ve adlandırılmış parametreleri (named parameters) destekler.
fun greet(name: String = "User", greeting: String = "Hello") { println("$greeting, $name!") }
greet(greeting = "Merhaba") // -> Merhaba, User!
@JvmOverloads anotasyonunun gerekli olabileceğini unutmayın.Fonksiyonu Kotlin'de çağırırken pozisyonel ve adlandırılmış argümanları herhangi bir sırada karıştırabilir miyiz?
Doğru cevap: Hayır, en az bir adlandırılmış argümanı belirttikten sonra, tüm sonraki argümanlar adlandırılmış olmalıdır. Bu durum derleme hatası doğurur.
// Yanlış greet(greeting = "Merhaba", "Ivan") // Hata! // Doğru greet("Ivan", greeting = "Merhaba") greet(name = "Ivan", greeting = "Merhaba")
Hikaye
Ekip, Kotlin modülünü eski Java projesi ile entegre etti ve varsayılan parametreleri olan fonksiyon için
@JvmOverloadsanotasyonunu eklemeyi unuttu. Sonuç olarak, Java kodu gerekli overload yöntemlerini göremedi — çağrıldığında runtime hataları oluştu.
Hikaye
Adlandırılmış parametreler kullanarak yeniden yapılandırma yaparken, geliştirici argümanları yanlışlıkla yer değiştirdi — daha sonra parametre adlarını değiştirme işlemi bu durumu gözden kaçırdı (tip kontrolü ihlal edilmedi, ancak çağrının anlamsallığı değişti!). Bu, UI mantığında tuhaf hatalara yol açtı, hemen fark edilmedi.
Hikaye
Bir geliştirici, okunabilirliği artırmaya çalışarak çağrının ortasında pozisyonel ve adlandırılmış argümanları karıştırdı. Kod derlenmedi, ancak ekip sorunun ne olduğunu anlamakta zorlandı — çünkü diğer dillerde sıklıkla karşılaştıkları bir durumdu ve Kotlin'den benzer bir davranış bekliyorlardı.