Kotlin — Tutorial to create your own DSLs in easy way

Yoga C. Pranata
Tunaiku Tech
Published in
3 min readJun 28, 2018

Terdapat banyak sekali fitur — fitur di Kotlin yang bisa kalian explore. Salah satu hal keren yang bisa dilakukan adalah membuat/mendesain sendiri DSL. Sehingga developers bisa lebih fokus untuk membuat code yang lebih mudah dibaca.

Sebelum kita mulai, kita perlu tahu apa itu DSL (domain-specific language)?

kata Wikipedia tentang apa itu DSL adalah:

A domain-specific language (DSL) is a computer language specialized to a particular application domain. This is in contrast to a general-purpose language (GPL), which is broadly applicable across domains.

Seperti penjelasan diatas, pada dasarnya DSL adalah bahasa yang digunakan pada satu bagian tertentu dari suatu aplikasi, tak seperti GPL (contohnya: Kotlin atau Java).

Advantage using DSL in Kotlin

Sebenernya kenapa kita harus buat DSL, apa untungnya?

Saat kita bicara tentang membuat DSL di Kotlin, sebenernya yang kita bicarakan adalah cara membuat DSL internal untuk mempermudah penggunaan Kotlin itu sendiri. Seperti memasukkan for loops didalam DSL kita.

Create the DSL

Kita akan membuat DSL sederhana seperti dibawah ini, perlu dicatat bahwa hasil akhir yang kita inginkan adalah seperti dibawah ini:

code diatas sudah bisa menjelaskan apa isi dan maksud dari function tersebut. mari kita buat step-by-step nya. Pertama kita harus buat model-model nya seperti ini:

Model untuk movies data.

dan model untuk details movie data.

Sekarang kita perlu membuat class khusus terpisah dari model class untuk penggunaan DSL. Kita buat constructor function untuk model Movies kita. Jika dilihat seperti MainDslActivity.kt, Movies class dideklarasikan didalam {…}. Codeblock itu sendiri sebetulnya mendefinisikan Lambda. Sekarang kita akan membuat movies function untuk DSL pertama kita.

cara pemanggilannya sebagai berikut:

Karena lambda hanya bisa mengembalikan one argument, itulah mengapa didalamnya harus mengimplementasi it diikuti variable yang ingin dipanggil. Kita tidak ingin ada istilah it saat memanggil variable, itulah mengapa kita akan menggunakan salah satu fitur dari Kotlin, yaitu Lambdas with receivers.

Supaya function kita bisa menggunakan receivers kita ubah movies function kita menjadi seperti ini:

Dengan begitu kita bisa menghapus it dan mengubah pemanggilan function movies kita seperti ini:

WOW, WOW, WOW hahahaha :D

Selanjutnya kita buat detailMovies function, sama seperti sebelumnya, perbedaannya kita buat detailMovies menjadi salah satu property of Movies Object. untuk melakukannya kita perlu menggunakan salah satu fitur yang paling keren dari Kotlin, adalah: Kotlin Extention Function.

Seperti yang dimention dari halaman https://kotlinlang.org/docs/reference/extensions.html.

Kotlin provides the ability to extend a class with new functionality without having to inherit from the class or use any type of design pattern such as Decorator.

Extention function memberi kemampuan untuk menambah function kedalam sebuah class tanpa harus mengakses class tersebut. Pretty cool right! :)

Berikut adalah function akhir dari Movies DSL kita:

Kita tambahkan detailMovies function kedalam Movies object yang bisa menerima Lambda DetailMovies sebagai receiver. Hasil akhir dari DSL kita adalah:

Sekian penjelasan tentang bagaimana penggunaan DSL di Kotlin. Semoga artikel ini bisa mempermudah kalian dalam memahami DSL didalam Kotlin.

See you next time. :)

--

--