Kotlin Academy · Pelajaran

Membina API seperti DSL

Gunakan infiks untuk kejelasan

Pelajaran 2 daripada 413 langkah

Membina API seperti DSL ialah pelajaran Kotlin Academy percuma di CoddyKit. Ini ialah pelajaran 2 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Kotlin Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Kotlin Academy merangkumi sejumlah 4 pelajaran.

Infiks untuk Kejelasan

Fungsi infiks ialah asas pembinaan DSL Kotlin (bahasa khusus domain). Fungsi ini menjadikan panggilan API terbaca seperti frasa semula jadi.

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

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

Idea Pembina Lancar

Menggabungkan infiks dengan jenis kecil membolehkan anda menyatakan niat secara deklaratif.

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

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

Konfigurasi Berasaskan Pair

Fungsi infiks to menggerakkan peta konfigurasi yang mudah dibaca.

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

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

DSL Julat

Pembina julat terbaca seperti bahasa biasa berkat infiks.

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

Menggabungkan Syarat

Anda boleh membina frasa seperti boolean yang mudah dibaca dengan fungsi infiks.

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)
}

Lambda dengan Penerima

DSL sebenar sering menggabungkan infiks dengan lambda yang mempunyai penerima, lalu membolehkan blok mengkonfigurasi objek secara terus.

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)
}

Penerangan tentang Lambda Penerima

Jenis fungsi seperti Html.() -> Unit menyebabkan blok dijalankan seolah-olah berada di dalam tika Html, jadi ahli boleh dipanggil tanpa awalan.

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)
}

apply sebagai DSL Mini

Fungsi standard apply itu sendiri ialah DSL lambda penerima untuk mengkonfigurasi objek.

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

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

Pastikan DSL Mudah Dibaca

DSL yang baik mengurangkan gangguan. Utamakan nama yang menjadikan tapak panggilan terbaca seperti penerangan tentang niat.

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)
}

Infiks Ditambah Lambda

Menggabungkan fungsi infiks dengan lambda menghasilkan pembina yang ekspresif.

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)
}

Bila Perlu Membina DSL

DSL berbaloi untuk konfigurasi yang berulang dan berstruktur (antara muka pengguna, pembina, ujian). Untuk logik sekali guna, fungsi biasa lebih mudah.

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

Semakan Pantas

Uji pemahaman anda tentang API yang menyerupai DSL.

Ringkasan

Anda telah mempelajari cara membina API yang menyerupai DSL:

  • Fungsi infiks menjadikan panggilan terbaca seperti frasa.
  • Lambda penerima (Type.() -> Unit) membolehkan blok mengkonfigurasi objek secara terus.
  • apply dan buildList ialah DSL pustaka standard.
  • Gunakan DSL untuk konfigurasi berstruktur dan berulang; pastikan ia mudah dibaca.
class C { var x = 0 }
fun c(b: C.() -> Unit) = C().apply(b)

fun main() {
    println(c { x = 9 }.x)
}
Percuma untuk bermula

Pelajari Kotlin dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
51
Pelajaran
203

Soalan Lazim

Adakah pelajaran “Membina API seperti DSL” percuma?

Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Kotlin Academy, termasuk “Membina API seperti DSL”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Kotlin Academy merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Membina API seperti DSL”?

Gunakan infiks untuk kejelasan Anda berlatih Kotlin Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Kotlin Academy?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Kotlin Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 2 daripada 4.

Berapa lamakah pelajaran “Membina API seperti DSL” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Kotlin Academy ini?

Ya. Setiap pelajaran Kotlin Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Fungsi infiks
  2. Membina API seperti DSL
  3. Fungsi tailrec
  4. Bila setiap satu digunakan
← Kembali ke Kotlin Academy