Kotlin programlama dilinde genişletmeler nedir?
sobes.tech yapay zeka
AI'dan gelen yanıt
Kotlin'deki genişletmeler, mevcut sınıflara yeni fonksiyonlar veya özellikler eklemeye olanak tanır; kalıtım veya dekoratör kullanmadan.
Ana kavramlar:
-
Genişletme fonksiyonları: Sınıflara yeni metodlar ekler.
// Genişletme fonksiyonunun tanımı fun String.removeWhitespaces(): String { return this.filter { it.isWhitespace().not() } } // Genişletme fonksiyonunun kullanımı val myString = " Hello World " val cleanedString = myString.removeWhitespaces() // cleanedString "HelloWorld" olacakGenişletme fonksiyonundaki
thisanahtar kelimesi, genişletmenin çağrıldığı nesneye atıfta bulunur (örneğin yukarıdaki örnektemyString). -
Genişletme özellikleri: Sınıflara yeni özellikler ekler, ancak durumları olamaz, yani veri saklayamazlar. Her erişimde hesaplanırlar.
// Genişletme özelliğinin tanımı val <T> List<T>.lastIndex: Int get() = size - 1 // Genişletme özelliğinin kullanımı val myList = listOf(1, 2, 3) val indexLast = myList.lastIndex // indexLast 2 olacakGenişletme özellikleri getter içermelidir. Setter isteğe bağlıdır.
Özellikler:
-
Statik yönlendirme: Genişletmenin çağrısı, nesnenin çalışma zamanındaki tipi değil, değişkenin tipine göre belirlenir. Bu, nesne yönelimli programlamadaki sanal metodlardan farklıdır.
open class Parent class Child : Parent() fun Parent.printType() = println("Parent") fun Child.printType() = println("Child") val p: Parent = Child() p.printType() // "Parent" yazdırır, çünkü değişken tipi Parent'tır -
Özel ve protected üyeler: Genişletmeler, genişlettikleri sınıfın özel veya protected üyelerine erişemez.
-
Companion Object Genişletmeleri: Bir sınıfın companion nesneleri genişletilebilir.
class MyClass { companion object { fun create() = MyClass() } } fun MyClass.Companion.printName() = println("MyClass Companion") MyClass.printName() // "MyClass Companion" yazdırır -
Görünürlük (Visibility): Genişletmeler, başka dosyalarda kullanılmak üzere bir dosyada tanımlanmalı ve içe aktarılmalıdır.
Genişletmeler, okunabilir ve esnek kod oluşturmak için güçlü bir araçtır; üçüncü taraf kütüphanelerinin sınıflarına fonksiyonellik eklemeye olanak tanır, kaynak kodlarını değiştirmeden.