Sobes.tech
Middle

Kotlin'de genişletme fonksiyonları nasıl çalışır?

sobes.tech yapay zeka

AI'dan gelen yanıt

Genişletme fonksiyonları, var olan sınıflara yeni fonksiyonlar eklemeye olanak tanır, kalıtım veya dekoratör kullanmadan.

Bir ön ek kullanılarak tanımlanırlar, bu ön ek genişletilecek tipi gösterir:

fun String.removeFirstChar(): String {
    // this, genişletilen tipin (String) nesnesine atıfta bulunur
    return this.substring(1)
}

Genişletme fonksiyonu çağrıldığında, derleyici onu statik bir metoda dönüştürür, bu metod ilk argüman olarak genişletilen nesneyi alır:

// Genişletme fonksiyonunun çağrısı
val original = "Hello"
val modified = original.removeFirstChar()

// Derleyici çağrıyı yaklaşık olarak şu şekilde dönüştürür:
// val modified = StringExtensionsKt.removeFirstChar(original) 

(Burada StringExtensionsKt, fonksiyon sınıfı dışında ise, statik metodlar içeren jenerik Kotlin sınıfının adıdır.)

Genişletme fonksiyonları sınıfı değiştirmez. Sadece statik metod çağrısı için sözdizimi şekeridir. Genişletilen sınıfın özel veya korumalı üyelerine erişimleri yoktur.

Ana avantajı, nesne yönelimli programlamayı taklit eden, daha okunabilir kod sağlamasıdır, böylece kalıtım sorunlarından kaçınılır.

Herhangi bir sınıf genişletilebilir, bunlar standart kütüphaneler ve Java sınıfleri de dahil. Genişletme fonksiyonları başka bir sınıfın üyesi olabilir, bu durumda yalnızca o sınıf içinde çağrılırlar.

Aşırı yükleme ve çatışma çözümünde, sınıfın üye fonksiyonlarına öncelik verilir, genişletme fonksiyonlarına göre. Aynı imzaya sahip birkaç genişletme fonksiyonu varsa, yerel olarak (aynı kapsamda) tanımlanan öncelik kazanır.