0Pricing
Kotlin Academy · Pelajaran

Membangun API Mirip DSL

Gunakan infix agar lebih jelas

Membangun API Mirip DSL adalah pelajaran Kotlin Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Kotlin Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Kotlin Academy mencakup 4 pelajaran total.

Infiks untuk Kejelasan

Fungsi infiks merupakan salah satu dasar DSL Kotlin (bahasa khusus domain). Fungsi ini membuat pemanggilan API terbaca seperti frasa alami.

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

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

Gagasan Pembangun yang Mengalir dengan Lancar

Menggabungkan infiks dengan tipe-tipe kecil memungkinkan Anda menyatakan maksud 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 Berbasis Pasangan

Fungsi infiks to mendukung 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 Rentang

Pembangun rentang terbaca seperti bahasa Inggris berkat infiks.

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

Menggabungkan Kondisi

Anda dapat merangkai frasa mirip 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 yang sesungguhnya sering menggabungkan infiks dengan lambda yang memiliki penerima, sehingga sebuah block dapat mengonfigurasi objek secara langsung.

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

Penjelasan Lambda Penerima

Tipe fungsi seperti Html.() -> Unit membuat block berjalan seolah-olah berada di dalam instans Html, sehingga anggota dapat 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 standar apply sendiri merupakan DSL lambda penerima untuk mengonfigurasi sebuah objek.

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

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

Jaga DSL Tetap Mudah Dibaca

DSL yang baik meminimalkan gangguan. Utamakan nama yang membuat lokasi pemanggilan terbaca seperti uraian tentang maksud.

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 dan Lambda

Menggabungkan fungsi infiks dengan lambda menghasilkan pembangun 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)
}

Kapan Membangun DSL

DSL bermanfaat untuk konfigurasi yang berulang dan terstruktur (UI, pembangun, pengujian). Untuk logika sekali pakai, fungsi biasa lebih sederhana.

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

Pemeriksaan Singkat

Uji pemahaman Anda tentang API yang menyerupai DSL.

Rangkuman

Anda telah mempelajari cara membangun API yang menyerupai DSL:

  • Fungsi infiks membuat pemanggilan terbaca seperti frasa.
  • Lambda penerima (Type.() -> Unit) memungkinkan block mengonfigurasi objek secara langsung.
  • apply dan buildList adalah DSL dari pustaka standar.
  • Gunakan DSL untuk konfigurasi yang terstruktur dan berulang; jaga agar tetap mudah dibaca.
class C { var x = 0 }
fun c(b: C.() -> Unit) = C().apply(b)

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

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Membangun API Mirip DSL” gratis?

Ya — teks lengkap “Membangun API Mirip DSL” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Kotlin Academy, upgrade ke CoddyKit PRO. Kursus Kotlin Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Membangun API Mirip DSL”?

Gunakan infix agar lebih jelas Kamu berlatih Kotlin Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Kotlin Academy?

Tidak diperlukan pengalaman sebelumnya. Kotlin Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.

Berapa lama pelajaran “Membangun API Mirip DSL” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Kotlin Academy ini?

Ya. Setiap pelajaran Kotlin Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Fungsi Infix
  2. Membangun API Mirip DSL
  3. Fungsi tailrec
  4. Kapan Menggunakan Masing-masingnya
← Kembali ke Kotlin Academy