Kotlin'de varsayılan parametreler, işlevin imzasında doğrudan varsayılan değerler belirtmeye olanak tanır, bu da kodun daha kompakt ve esnek olmasını sağlar. Bu özellik, okunabilirliği artırır ve bakımını kolaylaştırır, farklı sayıdaki argümanlarla aşırı yüklenmiş yöntemler oluşturma gerekliliğini azaltır.
Java'da işlevin farklı çağrıları için genellikle birden fazla aşırı yüklenmiş yöntem yazmak gerekir. Kotlin, varsayılan değerleri bildirmenin daha özlü bir yolunu geliştirdi ve bu da API'yi basitleştirdi.
Farklı çağrı durumları için yöntemlerin aşırı yüklenmesi karmaşık ve rahatsız edicidir, bu da fazla kod ve potansiyel bakım hatalarına yol açar.
Kotlin, varsayılan parametreleri doğrudan işlev tanımında bildirmeye olanak tanır. Bu, JVM bayt kodunda eşlik eden sentetik yöntemler aracılığıyla (Java'dan çağrıldığında) veya normal değer geçişiyle (Kotlin'den) gerçekleştirilir. Adlandırılmış parametrelerle birlikte, işlev çağrıları için arayüzü çok güçlü hale getirir.
fun greet(name: String = "Misafir", greeting: String = "Merhaba") { println("$greeting, $name!") } greet() // Merhaba, Misafir! greet("Alice") // Merhaba, Alice! greet(greeting = "Selam") // Selam, Misafir! greet("Bob", greeting = "Hoşgeldin") // Hoşgeldin, Bob!
Arayüz içindeki işlevlerde varsayılan parametreler kullanılabilir mi?
Evet, ancak varsayılan değer yalnızca Kotlin'den çağrıldığında uygulanır ve böyle bir yöntemi Java'dan çağırırken argümanları açıkça belirtmek gerekir.
İlk (sağdaki değil) parametreler için varsayılan bir parametre belirtmek mümkün mü, yoksa sadece en sağdakiler için mi?
Evet, Kotlin'de bu mümkündür, özellikle çağrılarda adlandırılmış argümanlar kullanıldığında. Ancak Java'dan bir işlev kullanıldığında zorluklar ortaya çıkabilir, çünkü Java adlandırılmış argümanları desteklemez ve varsayılan parametrelerin sağda olması gerekir.
Karışık kullanımlardaki konum ve adlandırılmış parametrelerin sırası nasıl çalışır?
Kotlin'de, ilk adlandırılmış argümandan sonra tüm sonraki argümanların adlandırılmış olması gerekir, aksi takdirde bir derleme hatası oluşur.
greet("Ivan", greeting = "Merhaba") // TAMAM greet(greeting = "Merhaba", "Ivan") // Hata: adlandırılmış bir argümandan sonra konumsal parametre geçilemez
Loglama kütüphanesinde farklı loglama kombinasyonları için 10 aşırı yüklenmiş yöntem uygulandı (Exception ile, Tag ile, ve benzeri), bunları desteklemek rahatsız edici.
Artıları:
Eksileri:
Varsayılan argümanlara sahip bir işlev kullanılıyor:
fun log(msg: String, tag: String = "", throwable: Throwable? = null) { ... }
Artıları:
Eksileri: