Kotlin Academy · Ders

Uzantı Özellikleri ve Hesaplanan Uzantılar

Alt sınıf oluşturmadan mevcut sınıflara hesaplanan özellikler ekleyin.

2. ders / 413 adım

Uzantı Özellikleri ve Hesaplanan Uzantılar, CoddyKit'te ücretsiz bir Kotlin Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Kotlin Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Kotlin Academy kursu toplamda 4 dersten oluşur.

Genişletme Özellikleri

Genişletme özellikleri, alt sınıflandırma yapmadan mevcut türlere hesaplanan özellikler ekler. Yedekleme alanları yoktur.

Salt Okunur Genişletme Özelliği

Hesaplanan bir genişletme özelliği oluşturmak için bir alıcı tanımlayın.
val String.wordCount: Int
    get() = trim().split(Regex("\\s+")).size
println("hello world kotlin".wordCount)  // 3

Değiştirilebilir Genişletme Özelliği

Okuma-yazma özellikli bir genişletme için hem alıcı hem de ayarlayıcı tanımlayın.
var MutableList<Int>.first: Int
    get() = this[0]
    set(value) { this[0] = value }
val list = mutableListOf(1, 2, 3)
list.first = 10
println(list)  // [10, 2, 3]

Yedekleme Alanı Yoktur

Genişletme özelliklerinin yedekleme alanları olamaz. Her zaman mevcut durumdan hesaplanırlar.
// ERROR: extension property cannot have backing field
// var String.cache: String = ""  // NOT allowed!

// OK: computed only:
val String.isPalindrome: Boolean
    get() = this == this.reversed()

Koleksiyonlarda Genişletme Özellikleri

Koleksiyon türlerine kullanışlı özellikler ekleyin.
val <T> List<T>.secondOrNull: T?
    get() = if (size >= 2) this[1] else null
val <T> List<T>.isNotNullOrEmpty: Boolean
    get() = isNotEmpty()
println(listOf(1, 2, 3).secondOrNull)  // 2

Boole Genişletme Özellikleri

Tür denetimleri için okunabilir boole özellikleri oluşturun.
val Any.isString: Boolean get() = this is String
val String.hasDigits: Boolean get() = any { it.isDigit() }
val Int.isPositive: Boolean get() = this > 0
println(42.isPositive)        // true
println("abc123".hasDigits)   // true

Genişletme Özellikleri ile Genişletme İşlevlerinin Karşılaştırılması

Hesaplama basitse ve nesnenin bir özelliğini temsil ediyorsa özellik kullanın. Parametreleri veya yan etkileri varsa işlev kullanın.
// Property: stateless, simple characteristic
val String.isEmail: Boolean get() = '@' in this
// Function: has parameters
fun String.padCenter(width: Int) = padStart((length + width) / 2)

Eşlik Eden Nesneyi Genişletme

Eşlik eden nesnelere genişletme özellikleri ekleyin.
data class Color(val r: Int, val g: Int, val b: Int) {
    companion object
}
val Color.Companion.RED get() = Color(255, 0, 0)
val Color.Companion.WHITE get() = Color(255, 255, 255)
println(Color.RED)  // Color(r=255, g=0, b=0)

Bağlama Özgü Genişletme Özellikleri

Bir sınıfın içinde tanımlanan genişletme özellikleri yalnızca o sınıfın kapsamındayken uygulanır.
class Formatter {
    val Int.formatted: String
        get() = "%,d".format(this)
    fun format(n: Int) = n.formatted
}
println(Formatter().format(1000000))  // 1,000,000

DSL'ler için Genişletmeleri Kullanma

Genişletme özellikleri, Kotlin DSL tasarımının temelini oluşturur.
val Int.dp: Float get() = this * 2.5f
val Float.sp: Float get() = this * 1.0f
// In DSL context:
view.setPadding(16.dp.toInt())

Genel Genişletme Özellikleri

Genişletme özellikleri tür parametrelerine sahip olabilir.
val <T> List<T>.head: T?
    get() = firstOrNull()
val <T> List<T>.tail: List<T>
    get() = drop(1)
println(listOf(1,2,3).head)  // 1
println(listOf(1,2,3).tail)  // [2, 3]

Kısa Kontrol

Kotlin'de genişletme özelliklerinin yedekleme alanları olabilir mi?

Özet

Genişletme özellikleri, yedekleme alanları olmadan türlere hesaplanan özellikler ekler. Bunları basit, durumsuz hesaplamalar için kullanın. Değiştirilebilir genişletme özelliklerinin ayarlayıcıları olabilir. DSL'ler ve akıcı API'ler için harikadır. Sırada: kapsamlı ve eşlik eden nesne genişletmeleri!
Başlamak ücretsiz

Yapay zeka eğitmeniyle Kotlin öğren — ücretsiz

Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.

Kurslar
51
Dersler
203

Sıkça Sorulan Sorular

“Uzantı Özellikleri ve Hesaplanan Uzantılar” dersi ücretsiz mi?

Evet — “Uzantı Özellikleri ve Hesaplanan Uzantılar” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Kotlin Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Kotlin Academy kursu toplamda 4 dersten oluşur.

“Uzantı Özellikleri ve Hesaplanan Uzantılar” dersinde ne öğreneceğim?

Alt sınıf oluşturmadan mevcut sınıflara hesaplanan özellikler ekleyin. Kotlin Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Kotlin Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Kotlin Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.

“Uzantı Özellikleri ve Hesaplanan Uzantılar” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Kotlin Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Kotlin Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Uzantı İşlevleri: Söz Dizimi ve Dağıtım Kuralları
  2. Uzantı Özellikleri ve Hesaplanan Uzantılar
  3. Kapsamlı Uzantılar ve Companion Uzantıları
  4. Uygulamalı Uzantılar: Context, View ve String Yardımcıları
← Kotlin Academy Sayfasına Dön