Extension property
- Kotlin kursu
- Orta seviye
- Ders 37/116
- 5 dk
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
// String.isLong extension property tanımı
// getter uzunluk > 10 döndürsün
// main'de iki değeri yazdırÖrnek çözüm
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
val String.isLong: Boolean
get() = ____ > 10
val String.isLong: Boolean
get() = length > 10
Açıklama: length String'in uzunluğunu verir.