Kotlin Academy · Ders

DSL Benzeri API'ler Oluşturma

Açıklık için infix kullanın

2. ders / 413 adım

DSL Benzeri API'ler Oluşturma, 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.

Açıklık İçin Ara Eklemeli İşlevler

Ara eklemeli işlevler, Kotlin DSL'lerinin (alana özgü dillerin) yapı taşlarından biridir. API çağrılarının doğal ifadeler gibi okunmasını sağlarlar.

infix fun String.eq(value: String) = this == value

fun main() {
    println("on" eq "on")
}

Akıcı Bir Oluşturucu Fikri

Ara eklemeli kullanımı küçük türlerle birleştirmek, amacı bildirime dayalı biçimde ifade etmenizi sağlar.

class Query(val field: String) {
    infix fun equals(value: String) = "$field = '$value'"
}

fun main() {
    val q = Query("name") equals "Sam"
    println(q)
}

İkili Tabanlı Yapılandırma

Ara eklemeli to işlevi, okunabilir yapılandırma eşlemelerini mümkün kılar.

fun configure(vararg opts: Pair<String, Any>) = opts.toMap()

fun main() {
    val cfg = configure("debug" to true, "level" to 3)
    println(cfg)
}

Aralık DSL'i

Ara eklemeli kullanım sayesinde aralık oluşturucular Türkçe cümleler gibi okunur.

fun main() {
    val r = 1 until 10 step 2
    println(r.toList())
}

Koşulları Birleştirme

Ara eklemeli işlevlerle okunabilir, boole benzeri ifadeler oluşturabilirsiniz.

data class Rule(val ok: Boolean) {
    infix fun and(other: Rule) = Rule(ok && other.ok)
}

fun main() {
    val result = Rule(true) and Rule(false)
    println(result.ok)
}

Alıcı İçeren Lambda İşlevleri

Gerçek DSL'ler genellikle ara eklemeli kullanımı alıcı içeren lambda işlevleriyle birleştirir; böylece bir block bir nesneyi doğrudan yapılandırabilir.

class Html {
    val parts = mutableListOf<String>()
    fun p(text: String) { parts.add("<p>$text</p>") }
}

fun html(block: Html.() -> Unit): Html {
    val h = Html()
    h.block()
    return h
}

fun main() {
    val page = html { p("Hi") }
    println(page.parts)
}

Alıcı İçeren Lambda İşlevlerini Açıklama

Html.() -> Unit gibi bir işlev türü, block'un Html örneğinin içindeymiş gibi çalışmasını sağlar; böylece üyeler bir ön ek olmadan çağrılabilir.

class Box { var value = 0 }

fun box(init: Box.() -> Unit): Box {
    val b = Box()
    b.init()
    return b
}

fun main() {
    val b = box { value = 42 }
    println(b.value)
}

Mini DSL Olarak apply

Standart apply işlevinin kendisi, bir nesneyi yapılandırmaya yönelik alıcı içeren lambda tabanlı bir DSL'dir.

class Server {
    var host = ""
    var port = 0
}

fun main() {
    val s = Server().apply {
        host = "localhost"
        port = 8080
    }
    println("${s.host}:${s.port}")
}

DSL'leri Okunabilir Tutun

İyi bir DSL gereksiz ayrıntıları en aza indirir. Çağrı noktasının amacın açıklaması gibi okunmasını sağlayan adları tercih edin.

data class Style(var bold: Boolean = false)

fun style(block: Style.() -> Unit) = Style().apply(block)

fun main() {
    val s = style { bold = true }
    println(s.bold)
}

Ara Eklemeli Kullanım ve Lambda

Ara eklemeli işlevleri lambda işlevleriyle birleştirmek, etkileyici oluşturucular ortaya çıkarır.

class Table {
    val rows = mutableListOf<String>()
    infix fun row(text: String) { rows.add(text) }
}

fun table(block: Table.() -> Unit) = Table().apply(block)

fun main() {
    val t = table {
        row("A")
        row("B")
    }
    println(t.rows)
}

Ne Zaman DSL Oluşturulmalı

DSL'ler tekrarlanan, yapılandırılmış yapılandırmalarda (kullanıcı arayüzü, oluşturucular, sınamalar) yararlıdır. Tek seferlik mantık için düz işlevler daha basittir.

fun main() {
    val list = buildList {
        add(1)
        add(2)
    }
    println(list)
}

Hızlı Sınama

DSL benzeri API'ler konusundaki anlayışınızı sınayın.

Özet

DSL benzeri API'ler oluşturmayı öğrendiniz:

  • Ara eklemeli işlevler, çağrıların ifadeler gibi okunmasını sağlar.
  • Alıcı içeren lambda işlevleri (Type.() -> Unit), block'ların nesneleri doğrudan yapılandırmasına olanak tanır.
  • apply ve buildList standart kitaplıktaki DSL'lerdir.
  • DSL'leri yapılandırılmış ve tekrarlanan yapılandırmalar için kullanın; okunabilir olmalarını sağlayın.
class C { var x = 0 }
fun c(b: C.() -> Unit) = C().apply(b)

fun main() {
    println(c { x = 9 }.x)
}
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

“DSL Benzeri API'ler Oluşturma” dersi ücretsiz mi?

Evet — “DSL Benzeri API'ler Oluşturma” 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.

“DSL Benzeri API'ler Oluşturma” dersinde ne öğreneceğim?

Açıklık için infix kullanı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 2. dersidir.

“DSL Benzeri API'ler Oluşturma” 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. Infix İşlevleri
  2. DSL Benzeri API'ler Oluşturma
  3. tailrec İşlevleri
  4. Her Birini Ne Zaman Kullanmalı
← Kotlin Academy Sayfasına Dön