0Pricing
Android Academy · Ders

Uzantı İşlevleri ve Üst Düzey İşlevler

Uzantı işlevleriyle mevcut türlere davranış ekleyin ve ifadeli Kotlin kodu için üst düzey işlevlerden ve kapsam işlevlerinden (let, apply, also, run, with) yararlanın.

Uzantı İşlevleri ve Üst Düzey İşlevler, CoddyKit'te ücretsiz bir Android Academy dersidir. Bu, 4 dersinin 4. 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, Android Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Android Academy kursu toplamda 4 dersten oluşur.

Genişletme İşlevleri

Genişletme işlevi, mevcut sınıfları onları değiştirmeden veya kalıtım kullanmadan yeni işlevlerle genişletmenizi sağlar. String, Int, kendi sınıflarınızı ve hatta Android'in View sınıfını genişletebilirsiniz.

Söz dizimi: fun TypeName.functionName() { }

Genişletme İşlevleri Yazma

Bir genişletme işlevinin içinde this, alıcı nesneye başvurur:

fun String.isPalindrome(): Boolean {
    val cleaned = this.lowercase().filter { it.isLetter() }
    return cleaned == cleaned.reversed()
}

fun Int.isEven() = this % 2 == 0

fun main() {
    println("racecar".isPalindrome())  // true
    println("hello".isPalindrome())    // false
    println(4.isEven())                // true
    println(7.isEven())                // false
}

Android Görünümlerinde Genişletme İşlevleri

Yaygın Android kalıbı — tekrarlanan gereksiz kodlar yerine bir genişletme kullanarak görünümleri gizleyin/gösterin:

import android.view.View

fun View.show() { visibility = View.VISIBLE }
fun View.hide() { visibility = View.GONE }
fun View.invisible() { visibility = View.INVISIBLE }

// Usage in Activity:
// binding.progressBar.show()
// binding.recyclerView.hide()

Üst Düzey İşlevler

Üst düzey işlev, parametre olarak bir işlev alır veya bir işlev döndürür. Bunları zaten kullandınız: filter, map ve forEach üst düzey işlevlerin tümüdür.

İşlev türü söz dizimi: (ParamType) -> ReturnType

İşlevleri Parametre Olarak Geçirme

Başka bir işlevi kabul eden bir işlev tanımlayın:

fun operate(a: Int, b: Int, op: (Int, Int) -> Int): Int {
    return op(a, b)
}

fun main() {
    val sum  = operate(3, 4) { x, y -> x + y }
    val prod = operate(3, 4) { x, y -> x * y }
    val max  = operate(3, 4, ::maxOf)   // method reference

    println(sum)   // 7
    println(prod)  // 12
    println(max)   // 4
}

İşlev Döndürme

İşlevler başka işlevler de döndürebilir — bu, yapılandırılabilir davranışlar oluşturmak için kullanışlıdır:

fun makeMultiplier(factor: Int): (Int) -> Int {
    return { number -> number * factor }
}

fun main() {
    val double = makeMultiplier(2)
    val triple = makeMultiplier(3)

    println(double(5))   // 10
    println(triple(5))   // 15

    val numbers = listOf(1, 2, 3, 4)
    println(numbers.map(double))  // [2, 4, 6, 8]
}

Kapsam İşlevleri: let

Kotlin kapsam işlevleri bir nesne üzerinde bir blok çalıştırır ve bir sonuç döndürür. let, null denetimleri ve dönüşümler için kullanılır:

fun main() {
    val name: String? = "Alice"

    // Only runs if name is not null
    name?.let {
        println("Name length: ${it.length}")
        println("Upper: ${it.uppercase()}")
    }

    // Transform a value
    val length = name?.let { it.length } ?: 0
    println("Length: $length")  // 5
}

Kapsam İşlevleri: apply ve also

apply bir nesneyi yapılandırır ve nesnenin kendisini döndürür. also bir yan etki gerçekleştirir ve nesneyi döndürür:

data class Config(var host: String = "", var port: Int = 0, var timeout: Int = 0)

fun main() {
    // apply: configure an object (this = receiver)
    val config = Config().apply {
        host = "api.example.com"
        port = 443
        timeout = 30
    }
    println(config)  // Config(host=api.example.com, port=443, timeout=30)

    // also: log or debug (it = receiver)
    val result = listOf(1, 2, 3)
        .also { println("Original: $it") }
        .map { it * 2 }
        .also { println("Doubled: $it") }
}

Kapsam İşlevleri: run ve with

run bir nesne üzerinde blok çalıştırır ve blok sonucunu döndürür. with benzerdir, ancak bir genişletme işlevi değildir:

data class User(val name: String, val age: Int)

fun main() {
    val user = User("Bob", 30)

    // run: compute something using the object
    val greeting = user.run {
        if (age >= 18) "Hello, $name!" else "Hi, $name!"
    }
    println(greeting)  // Hello, Bob!

    // with: group operations on an object
    val info = with(user) {
        "Name: $name, Age: $age"
    }
    println(info)  // Name: Bob, Age: 30
}

Kapsam İşlevleri Özet Tablosu

Doğru kapsam işlevini seçmek için hızlı başvuru:

  • let — null güvenli blok, nesneyi dönüştürür, lambda sonucunu döndürür
  • apply — nesneyi yapılandırır, nesneyi (this) döndürür
  • also — yan etkiler (günlük kaydı), nesneyi (it) döndürür
  • run — nesneden sonuç hesaplar, lambda sonucunu döndürür
  • with — nesne üzerindeki çağrıları gruplar, bir genişletme işlevi değildir

inline İşlevleri ve reified

Çalışma zamanında lambda nesnesi oluşturulmasını önlemek için üst düzey bir işlevi inline olarak işaretleyin. reified, genel tür T'yi çalışma zamanında kullanmanızı sağlar (normalde tür silinir):

inline fun <reified T> Any.isOfType(): Boolean = this is T

fun main() {
    println("hello".isOfType<String>())   // true
    println(42.isOfType<String>())         // false
    println(3.14.isOfType<Double>())       // true
}

Hızlı Kontrol

Yeni oluşturulan bir nesneyi yapılandırmak ve aynı nesneyi döndürmek için hangi kapsam işlevi en uygundur?

Özet: Genişletmeler ve Üst Düzey İşlevler

Kotlin'in işlevsel araç seti artık elinizde:

  • Genişletme işlevleri — kalıtım olmadan herhangi bir türe davranış ekler
  • Üst düzey işlevler — esnek API'ler için işlevleri geçirir ve döndürür
  • Kapsam işlevleri: let (null denetimi), apply (yapılandırma), also (yan etki), run/with (hesaplama)
  • inline + reified — çalışma zamanı tür bilgisine sahip, ek maliyetsiz lambdalar

Sırada: Fragments ile çok ekranlı uygulamalar oluşturma.

Sıkça Sorulan Sorular

“Uzantı İşlevleri ve Üst Düzey İşlevler” dersi ücretsiz mi?

Evet — “Uzantı İşlevleri ve Üst Düzey İşlevler” 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 Android Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Android Academy kursu toplamda 4 dersten oluşur.

“Uzantı İşlevleri ve Üst Düzey İşlevler” dersinde ne öğreneceğim?

Uzantı işlevleriyle mevcut türlere davranış ekleyin ve ifadeli Kotlin kodu için üst düzey işlevlerden ve kapsam işlevlerinden (let, apply, also, run, with) yararlanın. Android 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.

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

Önceden deneyim gerekmez. CoddyKit'te Android 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 4. dersidir.

“Uzantı İşlevleri ve Üst Düzey İşlevler” 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 Android Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Android 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. Null Güvenliği
  2. Sınıflar ve Nesneler
  3. Veri Sınıfları ve Mühürlü Sınıflar
  4. Uzantı İşlevleri ve Üst Düzey İşlevler
← Android Academy Sayfasına Dön