Function With dan Apply Kotlin

Muhammad Fajri
Tuesday, 18 May 2021

Bismillahirrahmanirrahim.

Pada bagian ini kita masih melanjutkan mengenai lambda yaitu function with dan apply, dari library standar, yaitu Standard.kt. Function ini menunjukkan kemampuan lambda Kotlin dan apa yang membuatnya lebih baik dari Java. Lamda Kotlin memiliki kemampuan untuk memanggil method dari object yang berbeda tanpa tambahan aturan di dalam body dari lambda. Lambda jenis ini disebut sebagai lambda with receiver.

Function with dan apply sederhananya merupakan function yang dibuat khusus dengan extension function dan lambda.

Contoh berikut mendefinisikan sebuah class dan mengatur beberapa properti. Pembuatan instance Event dan pengaturan beragam properti terjadi di dalam function main. Perhatikan bahwa untuk semua properti yang kita atur, harus diselesaikan secara eksplisit kembali pada object yang direferensikan, ini merupakan cara penulisan kode di Java.

import java.util.Date

data class Event(val title:String) {
    var date = Date()
    var time = ""
    var attendees = mutableListOf<String>()

    fun create() {
        print(this)
    }
}

fun main() {
    val mtg = Event("Management meeting")
    
    mtg.date = Date(2018,1,1)
    mtg.time = "0900H"
    mtg.attendees.add("Ted")
    
    mtg.create()
}

Jika menggunakan function with untuk mengatur ulang kode, maka akan menjadi:

fun main() {
    val mtg = Event("Management meeting")
    
    with(mtg) {
        date = Date(2018,1,1)
        time = "0900H"
        attendees.add("Ted")    
    }
}

Function with disimpan di dalam sebuah object mtg dan sebuah lambda. Di dalam lambda, kita bekerja dengan object mtg tanpa perlu secara eksplisit mereferensikannya. Hal ini mungkin karena object mtg telah dibuat menjadi receiver dari lambda–ingat kembali mengenai extension function.

Dan karena mtg merupakan receiver, di dalam lambda, kata kunci this menunjuk pada object mtg. Kita telah secara eksplisit mereferensi this di dalam kode, tetapi akan menjadi tidak lebih baik daripada saat kita pertama kali memulai dengan contoh ini. Dengan menghilangkan referensi eksplisit pada this, kode yang dihasilkan menjadi lebih jelas. Juga, kenyamanan meletakkan lambda diluar tanda kurung benar-benar berjalan dengan baik dalam situasi ini karena membuat struktur tampilan karenan with merupakan bagian dari bahasa Kotlin.

Function apply juga dapat mencapai hal yang sama, ini sangat mirip dengan function with kecuali bahwa ia mengembalikan receiver (object yang melaluinya)–function with tidak.

fun main() {
    val mtg = Event("Management meeting")
    
    mtg.apply {
        date = Date()
        time = "0900H"
        attendees.add("Ted")    
    }.create()
}

apply merupakan extension function dan object mtg sebagai receiver-nya. Karena object mtg menjadi recevier, this mengacu pada object mtg. Ketika lambda mengembalikan nilai, ia mengembalikan receiver tersebut, oleh karena itu kita dapat melakukan beberapa call padanya.

Ada banyak function yang lain di dalam Standard.Kt seperti run, let, also, dan lain-lain, tetapi yang dua ini (with dan apply) memberikan gagasan tentang bagaimana kemampuan sebuah lambda.

Referensi

  1. Hagos, Ted. 2018. Learn Android Studio 3 with Kotlin: Efficient Android App Development. Apress: Manila.