Berkenalan lebih jauh dengan Kotlin Extension

Yudistiro Septian Dwi Saputro
yudistiro
Published in
3 min readFeb 10, 2020

Sebagian dari temen temen android developer yang sudah migrasi ke kotlin pasti sudah tidak asing dengan yang namanya Kotlin Extension atau mungkin teman teman lebih mengenalnya dengan nama Android KTX.

Android KTX is a set of extensions for commonly used Android framework APIs, Android Jetpack libraries, and more. We built these extensions to make calling into Java programming language-based APIs from Kotlin code more concise and idiomatic by leveraging language features such as extension functions and properties, lambdas, named and default parameters, and coroutines.

Android KTX sendiri sudah ada lama sejak kotlin mulai di kenalkan, penerapan yang sering kita gunakan menggunakan android KTX adalah kita tidak perlu lagi melakukan inisialisasi dari view pada layout, kita bisa langsung memanggilnya menggunakan ID dari view yang ingin kita olah, gampangnnya kita tidak perlu lagi direpotkan dengan findViewById().

Copyright https://www.youtube.com/watch?v=JzaKJNt4eXk

Selain fungsi tersebut kotlin extension sendiri juga dapat kita manfaatkan lebih mempermudah kita dalam melakukan pengembangan aplikasi android, dengan kotlin extension dapat digunakan untuk menambahkan suatu fungsi pada class tanpa harus mewarisi/extend dari class asal, pengunaan ini mirip seperti fungsi utility class yang biasa kita buat di java.

Penerapan simplenya yang sering saya gunakan adalah kita ingin menconvert suatu string atau int ke dalam format IDR, biasanya akan memakan waktu untuk membuat class helper sendiri yang di dalamnya ada method untuk melakukan format ke IDR, namun dengan kotlin extension hal ini menjadi lebih mudah karena kita tidak perlu mendeklarasi class helper terus, dan method formatToIDR bisa langsung kita panggil.

Untuk mencobanya pastikan kita sudah mengimplemntasikan kotlin extension di dalam gradle.build.

apply plugin: ‘kotlin-android-extensions’

Kemudian buat sebuah class helper biasa, namun pada method kita memberikan tipe objek terlebih dahulu sebelum nama method yang ingin kita bikin, kemudan retrun objek yang kita inginkan.

fun Any.toIdr(): String{
sb.clear()
val stringValue = if (this !is String) this.toString() else this
val plainValue = clear(stringValue)
val length = plainValue.length
val count = if (length % 3 == 0) {
length / 3 - 1
} else {
length / 3
}

var m = -1
val reverse = sb.append(plainValue).reverse().toString()
sb.delete(0, length)
for (i in count downTo 1) {
for (j in 0..2) {
m++
sb.append(reverse[m])
}
sb.append(".")
}
if (m < length - 1) {
while (m < length - 1) {
m++
sb.append(reverse[m])
}
}

return "Rp " + sb.reverse().toString()
}

pada method di atas, kita menambahkan fungsi pada semua class agar dapat memanggil method yang kita buat yaitu method .toIdr() dengan balikan menjadi string value dimana balikan ini nanti memiliki prefix berupa Rp dan diikuti dari nilai value angka yang kita sesuaikan menjadi bertipe rupiah.

Pemanggil dari extension yang sudah kita buat lebih mudah karena tidak perlu mendeklarasikan class helper yang ada, kurang lebih menjadi seperti berikut :

val amount = 1000000
text_total_pay.text = amount.toIdr()


val amountString = "500000"
text_total_pay.text = amountString.toIdr()

dapat kita lihat method toIdr() dapat kita panggil pada semua tipe objek baik string maupun int, hal ini karena kita mendeklarasikan pada method tadi dengan awalan Any, jika kita mendeklarasikan menjadi String maka hanya value bertipe string saja yang bisa memanggil method toIdr() begitu juga sebaliknya jika kita mendeklarasikan menjadi int, penerapan lain bisa digunakan untuk membuat fungsi general yang sering dipanggil seperti convert date format memuat efek button dsb.

copyright https://medium.com/@isopproject/useful-kotlin-extension-function-586c645c2020

Jika teman teman ingin belajar lebih lanjut mengenai kotlin extension teman teman bisa mencoba codelab yang ada di google codelabs, disitu teman teman agar belajar bagaiman menerapkan kotlin extension untuk mendapatkan lokasi menggunakan kotlin extension dan coroutine.

--

--