0Pricing
Kotlin Academy · Ders

Kapsamlı Uzantılar ve Companion Uzantıları

Uzantı görünürlüğünü sınırlayın ve companion nesnelere uzantılar ekleyin.

Kapsamlı Uzantılar ve Companion Uzantıları, CoddyKit'te ücretsiz bir Kotlin Academy dersidir. Bu, 4 dersinin 3. 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şletmeler Neden Kapsamlandırılır?

Varsayılan olarak genişletmeler, içe aktarıldıkları her yerde görünür. Kapsamlandırma, görünürlüğü bir sınıf, dosya veya bağlamla sınırlar; ad alanı kirliliğini azaltır ve keşfedilebilirliği artırır.

Dosyaya Özel Genişletmeler

Bir genişletme işlevini dosya düzeyinde private olarak işaretleyerek yalnızca o dosyayla sınırlandırın.

private fun String.shout() = uppercase() + "!"
fun main() {
    println("hello".shout()) // HELLO!
}

Dahili Görünürlük

Genişletmeleri geçerli modülle sınırlamak için internal kullanın — dışarıdan kullanılması amaçlanmayan kütüphane içi kodlar için idealdir.

internal fun List<Int>.sumIfPositive(): Int = filter { it > 0 }.sum()
fun main() {
    println(listOf(-1, 2, 3, -4).sumIfPositive()) // 5
}

Üye Genişletme İşlevleri

Bir genişletmeyi bir sınıfın içinde tanımlayarak yalnızca o sınıfın bir örneği kapsamdayken kullanılmasını sağlayın. İki alıcısı vardır: dağıtım alıcısı (sınıf) ve genişletme alıcısı (hedef).

class StringHelper(val prefix: String) {
    fun String.withPrefix() = prefix + this
    fun build(): String = "world".withPrefix() // calls extension via instance
}
fun main() {
    println(StringHelper("hello ").build()) // hello world
}

Üye Genişletmelerinin Görünürlüğü

Üye genişletmelerine dağıtım sınıfının dışından erişilemez. Kapsülleme için kullanışlıdır.

class Repo {
    fun List<Int>.allPositive() = all { it > 0 }
    fun check(xs: List<Int>) = xs.allPositive()
}
fun main() {
    val r = Repo()
    println(r.check(listOf(1, 2, 3))) // true
    // listOf(1).allPositive() // ERROR — no access
}

Eşlik Eden Nesnede Genişletme

Bir sınıfın eşlik eden nesnesine genişletme ekleyin. Çağıranlara statik bir yöntem gibi görünür, ancak sınıfın dışında bulunur.

class Greeter {
    companion object
}
fun Greeter.Companion.morning() = "Good morning!"
fun main() {
    println(Greeter.morning())
}

Eşlik Eden Nesne Genişletmeleri Neden Kullanılır?

Özgün sınıfı değiştirmeden dışarıdan fabrika yöntemleri veya yardımcılar eklemek için kullanışlıdır.

class User(val name: String) {
    companion object
}
fun User.Companion.guest() = User("Guest")
fun User.Companion.system() = User("System")
fun main() {
    println(User.guest().name)
    println(User.system().name)
}

Boş Eşlik Eden Nesne Gereklidir

Eşlik eden nesne genişletmelerinin bağlanabilmesi için bir sınıfın eşlik eden nesne bildirmesi gerekir (boş olsa bile). Aksi takdirde genişletme hedefi mevcut olmaz.

class Box {
    companion object // required, even if empty
}
fun Box.Companion.create(): Box = Box()
fun main() {
    println(Box.create())
}

İçe Aktarmalarla Kapsamlı Genişletmeler

Bir genişletmenin kullanımını yalnızca belirli dosyalarda içe aktararak kapsamlandırabilirsiniz. Genişletmeyi içe aktarmayan dosyalar onu göremez.

// File A:
// fun String.shout() = uppercase()
// File B imports:
// import com.example.shout
// Only File B can call shout()
fun String.shout() = uppercase() + "!"
fun main() { println("hi".shout()) }

Kapsam İşleviyle Genişletme İşlevi

Bir nesneyi genişletme kullanımı için geçici olarak kapsama almak üzere with veya apply kullanın.

class StringTools {
    fun String.greet() = "Hello, $this!"
    fun process(name: String) = with(this) {
        name.greet()
    }
}
fun main() {
    println(StringTools().process("Ada"))
}

Eşlikçi Üzerindeki Uzantı Özellikleri

Eşlikçi uzantıları da özellik olabilir; sınıfın dışından adlandırılmış sabitler ekleyebilirsiniz.

class HttpStatus {
    companion object
}
val HttpStatus.Companion.OK_CODE: Int get() = 200
val HttpStatus.Companion.NOT_FOUND: Int get() = 404
fun main() {
    println(HttpStatus.OK_CODE)
    println(HttpStatus.NOT_FOUND)
}

En İyi Uygulamalar

Dosyaya özgü yardımcılar için private, yalnızca modüle açık API'ler için internal, kapsülleme için üye uzantılarını ve dışarıdan fabrika benzeri yardımcılar eklemek için eşlikçi uzantılarını kullanın.

class StringUtils {
    companion object
}
fun StringUtils.Companion.isAlpha(s: String) = s.all { it.isLetter() }
fun main() {
    println(StringUtils.isAlpha("hello"))
    println(StringUtils.isAlpha("hi5"))
}

Hızlı Kontrol

Dışarıdan bir sınıfa eşlikçi uzantısı ekleyebilmeniz için sınıfta ne bulunması gerekir?

Özet

Uzantıların kapsamını private, internal veya bir sınıf içindeki üye uzantıları ile sınırlayın. Sınıfın bildirilmiş eşlikçi nesnesine bağlayarak dışarıdan (işlevler veya özellikler olarak) eşlikçi uzantıları ekleyin. Bu yaklaşım, kodu modüler tutarken ad alanının kirlenmesini azaltır.

Sıkça Sorulan Sorular

“Kapsamlı Uzantılar ve Companion Uzantıları” dersi ücretsiz mi?

Evet — “Kapsamlı Uzantılar ve Companion 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.

“Kapsamlı Uzantılar ve Companion Uzantıları” dersinde ne öğreneceğim?

Uzantı görünürlüğünü sınırlayın ve companion nesnelere uzantılar 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 3. dersidir.

“Kapsamlı Uzantılar ve Companion 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