0Pricing
Kotlin Academy · Ders

Alıcılı Lambda: DSL Temeli

Alıcılı işlev türlerini ve bunların DSL söz dizimini nasıl etkinleştirdiğini anlayın.

Alıcılı Lambda: DSL Temeli, 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.

Alıcılı Lambda Nedir

Alıcılı lambda, gövdesi belirlenmiş bir alıcı nesnesinin üyelerine herhangi bir niteleyici olmadan erişebilen bir işlev ifadesidir. Türü şöyle görünür: (ReceiverType) -> ReturnType; ReceiverType.() -> ReturnType olarak yazılır.

Sözdizimi Karşılaştırması

Normal lambda: { value: Int -> value + 1 }. Alıcılı lambda: StringBuilder.() -> Unit; bu lambda içinde this, StringBuilder örneğini ifade eder.

val addHello: StringBuilder.() -> Unit = {
    append("Hello")   // this = StringBuilder
    append(", World")
}

with Kullanarak Alıcılı Lambda Uygulama

Standart kitaplıktaki with işlevi bir alıcı ve alıcılı bir lambda kabul eder. Lambda'yı, verilen nesne this olacak şekilde çağırır:

val result = with(StringBuilder()) {
    append("Kotlin")
    append(" DSLs")
    toString()
}  // result = "Kotlin DSLs"

Kendi Oluşturucu İşlevinizi Tanımlama

Mini oluşturucu API'leri oluşturmak için alıcılı lambdalar kabul eden işlevler yazabilirsiniz:

class HtmlTag(val name: String) {
    val children = mutableListOf<HtmlTag>()
    fun render(): String = "<$name>${children.joinToString("") { it.render() }}</$name>"
}

fun div(block: HtmlTag.() -> Unit): HtmlTag {
    val tag = HtmlTag("div")
    tag.block()
    return tag
}

Oluşturucuyu Çağırma

Lambda içinde this, HtmlTag nesnesidir; bu nedenle üyelerine doğrudan erişilebilir:

val page = div {
    children += HtmlTag("p")
}

apply Alıcılı Bir Lambdadır

Kapsam işlevi apply, en basit örnektir: this üzerinde alıcılı bir lambda çağırır ve this döndürür:

val list = mutableListOf<Int>().apply {
    add(1)
    add(2)
    add(3)
}   // list = [1, 2, 3]

DSL Örüntüsü

DSL'ler, her biri alıcılı bir lambda kabul eden oluşturucu işlevlerinin iç içe yerleştirilmesiyle oluşturulur. Her düzey kendi alıcısını denetler ve veri hiyerarşisini yansıtan doğal, girintili bir yapı sağlar.

html {
    head { title("My Page") }
    body {
        div {
            p("Hello!")
        }
    }
}

Alıcılı İşlev Türleri

İşlev türünü T.() -> R kullanarak alıcılı lambdaları değişkenlerde saklayabilirsiniz:

val greet: String.() -> String = { "Hello, $this!" }
println("World".greet())  // "Hello, World!"

Genişletme İşlevleri ve Alıcılı Lambdalar

Genişletme işlevleri ve alıcılı lambdalar aynı mekanizmayı kullanır: her ikisi de örtük bir this sağlar. Aralarındaki fark, genişletme işlevinin derleme zamanında bildirilmesi, alıcılı lambdanın ise aktarılabilen bir değer olmasıdır.

Alıcı Lambdalarını Birleştirme

Zengin hiyerarşik DSL'ler oluşturmak için birden çok oluşturucu işlevi birleştirilebilir. Önemli olan, her oluşturucu işlevinin kendi alıcısını ayarlayarak kapsamları yalıtılmış tutmasıdır.

Tür Çıkarımı ve Alıcılı Lambdalar

Kotlin, alıcı türünü parametre bildiriminden çıkarır; bu nedenle çağıranların lambdalarına tür açıklaması eklemesi gerekmez. Derleyici, blok içinde this'in ne olduğunu bilir.

Kısa Kontrol

StringBuilder.() -> Unit türündeki alıcılı bir lambda içinde this neyi ifade eder?

Özet: Alıcılı Lambda

Temel çıkarımlar:

  • Alıcılı lambda, lambda gövdesi içinde örtük bir this sağlar
  • ReceiverType.() -> ReturnType olarak bildirilir
  • Tüm Kotlin DSL'lerinin temelidir
  • Standart kitaplık bunu apply, with, run, buildString vb. işlevlerde kullanır

Sıkça Sorulan Sorular

“Alıcılı Lambda: DSL Temeli” dersi ücretsiz mi?

Evet — “Alıcılı Lambda: DSL Temeli” 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.

“Alıcılı Lambda: DSL Temeli” dersinde ne öğreneceğim?

Alıcılı işlev türlerini ve bunların DSL söz dizimini nasıl etkinleştirdiğini 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.

“Alıcılı Lambda: DSL Temeli” 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. Alıcılı Lambda: DSL Temeli
  2. @DslMarker: Alıcı Sızıntısını Önleme
  3. Tür Güvenli HTML/Config DSL Oluşturma
  4. Kullanıcıları Bozmadan DSL'leri Sınama ve Geliştirme
← Kotlin Academy Sayfasına Dön