CodeBlanks Logo Icon CodeBlanks

Extension property

val Receiver.ext ile extension property öğrenirsin.

Extension property

Bir extension property, mevcut bir türe dışarıdan özellik ekler. val Receiver.prop: Type biçiminde yazılır; getter kullanır.

Örnek: val String.isLong: Boolean get() = length > 10. Bu özellik String'e isLong ekler. "merhaba dünya".isLong çağrısı true döndürür. Extension property'lerin yalnızca getter'ı olabilir; çünkü uzantı bir alan (backing field) saklayamaz. Hesaplanan değerler için uygundur.

isLong özelliği

Bir extension property'nin getter'ı this üzerinden alıcının metot ve özelliklerine erişir. Backing field olmadığından yalnızca hesaplama yapılır.

Örnek: val String.isLong: Boolean get() = length > 10. length aslında this.length anlamına gelir. "merhaba dünya".isLong çağrısı true döndürür; "kısa" için false. Extension property, sınıf kaynağını değiştirmeden hesaplanan özellik eklemenin kısa yoludur.

Uygulama String.isLong extension property

val String.isLong: Boolean extension property tanımla; getter'ı length > 10 döndürsün. main içinde "merhaba dünya".isLong ve "kısa".isLong değerlerini ayrı satırlarda println ile yazdır.

Başlangıç kodu

Main.kt
// String.isLong extension property tanımı
// getter uzunluk > 10 döndürsün
// main'de iki değeri yazdır

Örnek çözüm

Main.kt
val String.isLong: Boolean
    get() = length > 10

fun main() {
    println("merhaba dünya".isLong)
    println("kısa".isLong)
}

Beklenen çıktı

true
false

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 extension property parçalarını eşle

Kavram Anlamı
val String.isLong Alıcı ve özellik
get() = length > 10 Getter gövdesi
"abc".isLong Çağrı
Boolean Dönüş türü

2 Bir <strong>extension property</strong> neden yalnızca val olabilir (var değil)?

  • Çünkü val daha hızlıdır
  • Çünkü backing field saklayamaz Doğru cevap
  • Çünkü var sözdizimi geçersizdir
  • Çünkü yalnızca sınıf içinde tanımlanır

Açıklama: Extension property backing field saklayamaz; bu yüzden yalnızca val olur.

3 extension property tanımını tamamla

Soru
val String.isLong: Boolean
    get() = ____ > 10
Cevap
val String.isLong: Boolean
    get() = length > 10

Açıklama: length String'in uzunluğunu verir.

Orta seviye bölümündeki tüm dersler