0Pricing
Kotlin Academy · Ders

Uzantı İşlevleri: Söz Dizimi ve Dağıtım Kuralları

Uzantı işlevleri yazın ve statik dağıtım anlamını anlayın.

Uzantı İşlevleri: Söz Dizimi ve Dağıtım Kuralları, CoddyKit'te ücretsiz bir Kotlin Academy dersidir. Bu, 4 dersinin 1. 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 İşlevleri Nedir?

Genişletme işlevleri, mevcut sınıfları değiştirmeden veya kalıtım kullanmadan bunlara yeni işlevler eklemenizi sağlar.

Temel Genişletme İşlevi Sözdizimi

İşlev adının önüne, genişlettiğiniz türü yazın; buna 'alıcı tür' denir.
fun String.shout(): String = uppercase() + "!"
println("hello".shout())  // HELLO!
fun Int.isEven() = this % 2 == 0
println(4.isEven())  // true

Genişletmelerde this

Bir genişletme işlevinin içinde 'this', alıcı nesneyi belirtir.
fun List<Int>.secondOrNull(): Int? {
    return if (size >= 2) this[1] else null
}
println(listOf(10, 20, 30).secondOrNull())  // 20
println(listOf(5).secondOrNull())           // null

Statik Dağıtım: Genişletmeler Geçersiz Kılamaz

Genişletme işlevleri, bildirilen türe göre derleme zamanında statik olarak çözümlenir — sanal DEĞİLDİR.
open class Base
class Child : Base()
fun Base.greet() = "Hello from Base"
fun Child.greet() = "Hello from Child"

val obj: Base = Child()
println(obj.greet())  // "Hello from Base" (static dispatch!)

Genişletmeler ile Üye İşlevlerinin Karşılaştırılması

Bir sınıf genişletmeyle aynı imzaya sahip bir üye işlevi içeriyorsa, her zaman üye işlevi tercih edilir.
class Greeter {
    fun hello() = "member hello"
}
fun Greeter.hello() = "extension hello"  // shadowed!
println(Greeter().hello())  // "member hello"

Null Olabilir Alıcı Genişletmeleri

Null olabilen türleri genişletebilirsiniz. İçeride, 'this == null' denetimleriyle null durumunu ele alın.
fun String?.orEmpty() = this ?: ""
fun Any?.toStringSafe() = this?.toString() ?: "null"
println(null.orEmpty())  // ""
println(42.toStringSafe())  // "42"

Görünürlük ve Kapsam

Genişletmeler en üst düzeyde (genel), bir sınıfın içinde (üye genişletmeleri) veya bir dosyada bulunabilir. Normal görünürlük kurallarına uyarlar.
// Top-level extension:
fun List<String>.joinUppercase() = joinToString { it.uppercase() }
// Private to file:
private fun String.clean() = trim().lowercase()

Eşlik Eden Nesne Genişletmeleri

Sınıf düzeyindeki ad alanını genişletmek için eşlik eden bir nesneye genişletmeler ekleyin.
class User(val name: String) {
    companion object
}
fun User.Companion.guest() = User("Guest")
val guest = User.guest()

Standart Kütüphane Türlerinde Genişletmeler

Yerleşik türler de dâhil olmak üzere her türü genişletin.
fun Double.roundTo(decimals: Int): Double {
    val factor = Math.pow(10.0, decimals.toDouble())
    return Math.round(this * factor) / factor
}
println(3.14159.roundTo(2))  // 3.14

Genişletmeleri Düzenleme

Bir türe ait genişletmeleri özel bir dosyada gruplayın; örneğin StringExtensions.kt, DateExtensions.kt.
// StringExtensions.kt
fun String.titleCase() = split(" ")
    .joinToString(" ") {
        it.replaceFirstChar { c -> c.uppercase() }
    }
println("hello world".titleCase())  // Hello World

Genişletmeler Özel Üyelere Erişemez

Genişletmeler yalnızca genel ve dahili üyelere erişebilir — özel veya korumalı üyelere erişemez.
class Secret {
    private val key = "hidden"
    val name = "public"
}
fun Secret.reveal() {
    println(name)  // OK
    // println(key)  // Error: key is private
}

Kısa Kontrol

Bir sınıfın üye işleviyle bir genişletme işlevi aynı imzaya sahipse hangisi çağrılır?

Özet

Genişletme işlevleri, herhangi bir sınıfa değiştirmeden davranış ekler. Statik olarak dağıtılırlar (geçersiz kılma yoktur). Üyeler genişletmelere üstün gelir. Null güvenli yardımcılar için null olabilen alıcıları kullanın. Sırada: genişletme özellikleri!

Sıkça Sorulan Sorular

“Uzantı İşlevleri: Söz Dizimi ve Dağıtım Kuralları” dersi ücretsiz mi?

Evet — “Uzantı İşlevleri: Söz Dizimi ve Dağıtım Kuralları” 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ı İşlevleri: Söz Dizimi ve Dağıtım Kuralları” dersinde ne öğreneceğim?

Uzantı işlevleri yazın ve statik dağıtım anlamını anlayın. 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 1. dersidir.

“Uzantı İşlevleri: Söz Dizimi ve Dağıtım Kuralları” 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