ProgramlamaAndroid geliştirici

Kotlin'de default argümanlar ve adlandırılmış parametreler nasıl çalışır? Java'dan farklarını, argüman iletimindeki nüansları, overload yöntemleri ile derlemeyi, adlandırılmış ve pozisyonel parametrelerin sıralamasını anlatın. Bir örnek verin.

Hintsage yapay zeka asistanı ile mülakatları geçin

Cevap.

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.

Temel noktalar:

  • Kotlin'de bir fonksiyonun parametreleri varsayılan değerlere sahip olabilir:
    fun greet(name: String = "User", greeting: String = "Hello") { println("$greeting, $name!") }
  • Sadece gerekli parametreleri belirterek fonksiyonu çağırabilirsiniz; diğerleri varsayılan değerlerle doldurulacaktır.
  • Adlandırılmış parametreler, argümanın ismini açıkça belirtmenizi sağlar — çok sayıda parametresi olan fonksiyonlar için özellikle kullanışlıdır:
    greet(greeting = "Merhaba") // -> Merhaba, User!
  • Adlı (pozisyonel) ve adlandırılmış parametreleri birleştirebilirsiniz, ancak adlandırılmışlar çağrının ortasında kullanılmamalıdır.
  • Java'da (her kombinasyon için overload yapılırken) Kotlin, varsayılan argümanları yalnızca Java ile uyumluluk için overload yöntemlerine derler, içerde ise bunu göremezsiniz.

Nüanslar:

  • Bir adlandırılmış argüman kullandıktan sonra, sonraki argümanların da adlandırılmış olması gerekir.
  • Varsayılan parametrelere sahip fonksiyonları Java'dan kullanmak için @JvmOverloads anotasyonunun gerekli olabileceğini unutmayın.

Tuzağa Düşüren Soru.

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")

Konunun karmaşıklığından dolayı yaşanan gerçek hata örnekleri.


Hikaye

Ekip, Kotlin modülünü eski Java projesi ile entegre etti ve varsayılan parametreleri olan fonksiyon için @JvmOverloads anotasyonunu 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ı.