Function With dan Apply Kotlin
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.
Baca Function Kotlin
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
sepertirun
,let
,also
, dan lain-lain, tetapi yang dua ini (with
danapply
) memberikan gagasan tentang bagaimana kemampuan sebuah lambda.
Referensi
- Hagos, Ted. 2018. Learn Android Studio 3 with Kotlin: Efficient Android App Development. Apress: Manila.