ProgramlamaBackend geliştirici

Kotlin'de infix fonksiyonları nedir, nasıl tanımlanır ve doğru bir şekilde kullanılır, hangi kısıtlamalar vardır? Kendi infix fonksiyonunuzu yaratma örneği verin ve dikkat edilmesi gereken noktaları anlatın.

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

Cevap.

Infix fonksiyonu - noktaları ve parantezleri kullanmadan infix biçiminde çağrılabilen bir fonksiyondur, bu da kodun okunabilirliğini artırır. Bu tür fonksiyonlar, özellikle DSL (alan spesifik diller) oluşturmak için kullanışlıdır.

Infix fonksiyonu nasıl tanımlanır:

  • Fonksiyon bir sınıf metodu/extension fonksiyonu olmalıdır.
  • Tam olarak bir parametreye sahip olmalıdır.
  • infix belirteci ile ilan edilmelidir.
  • Parametre için vararg ve varsayılan değer kullanımına izin verilmez.

Örnek:

infix fun Int.add(x: Int): Int = this + x val result = 5 add 10 // 15

Avantajlar:

  • Okunabilirliği artırır, özellikle hesaplamalar veya zincirleme çağrılar için.
  • Koleksiyon oluşturma, koşulları kontrol etme gibi durumlar için uygulanabilir (örneğin, x to y).

Kısıtlamalar ve dikkat edilmesi gereken noktalar:

  • Infix yalnızca BİR zorunlu parametreye sahip metotlar için geçerlidir.
  • Infix işlemlerinin önceliği, karşılaştırma ve aritmetik işlemlerin önceliğinden daha düşüktür (bu bazen operasyon önceliği ile ilgili sürprizlere yol açar).
  • Infix fonksiyonu varsayılan parametreler ve vararg ile çalışmaz.

Kandırıcı bir soru.

Birden fazla parametre veya varsayılan parametre ile infix fonksiyonu kullanılabilir mi?

Cevap: Hayır, kullanılamaz. Infix fonksiyonu, varsayılan değeri olmayan ve vararg olmayan tam olarak bir zorunlu parametreye sahip olabilir.

Yanlış tanımın örneği:

// Hata! infix fun foo(a: Int, b: Int) { }

Bilginin inceliklerinden dolayı yaşanan gerçek hata örnekleri:


Hikaye

Proje, builder fonksiyonlarını daha okunabilir infix ifadeleriyle değiştirmek için bir infix fonksiyonu entegre etmeye çalıştı. Parametre sayısı üzerindeki kısıtlamaları bilmedikleri için fonksiyonu iki parametre ile ilan ettiler - öğrenciler, derlemenin neden geçmediğini anlamakta zorlandılar.


Hikaye

Geliştirici, büyük bir aritmetik ifadede parantezsiz infix ifadeleri kullandı ve işlemlerinin önceliğinin geleneksel matematiksel operatörlerinkiyle aynı olduğunu düşündü. Sonuç olarak, ifadeler beklenildiği gibi hesaplanmadı - açık parantezlerle yeniden yazmak zorunda kaldılar.


Hikaye

Bir koleksiyonda paring'i infix ile uyguladılar ("item to value") ve içeride nesting uyguladılar, ancak sözdizimini anlamadıkları için iki iç içe infix çağrısı çalışmadı - yalnızca üst seviyede bir çift ataması işlendi, iç içe çiftler görmezden gelindi ve önemli veri kaybına yol açtı.