Member References di Kotlin

Dhe997

Member References di Kotlin

Seperti yang sudah kita pelajari pada modul sebelumnya, saat mendeklarasikan sebuah lambda dengan function type, kita bisa menggunakannya seperti berikut:

  1. val sum: (Int, Int) -> Int = { valueA, valueB -> valueA + valueB }


Dengan Kotlin, kita bisa memisahkan lambda expression menjadi fungsi tersendiri dan mereferensikannya langsung sebagai instance dari function type dengan cara seperti di bawah ini:


  1. val sum: (Int, Int) -> Int = ::count

  2. fun count(valueA: Int, valueB

  3. : Int): Int {

  4.    return valueA + valueB

  5. }


Kode di atas ditulis dengan mekanisme Reflection yang berarti seperangkat fitur bahasa dan library yang memungkinkan kita untuk mengamati struktur kode dari proyek yang sedang kita kerjakan secara langsung.

Function References

Pada suatu kondisi, terkadang kita butuh mereferensikan sebuah fungsi. Sebagai contoh, misal kita memiliki fungsi seperti berikut:

  1. fun isEvenNumber(number: Int) = number % 2 == 0


Fungsi di atas digunakan untuk memeriksa apakah suatu angka merupakan sebuah bilangan genap. Dengan menggunakan operator :: kita bisa menggunakannya sebagai instances dari function type. Sebagai contoh, penggunaan fungsi filter() yang menjadi bagian dari kelas List berikut:

  1. fun main() {

  2.    val numbers = 1.rangeTo(10)

  3.    val evenNumbers = numbers.filter(::isEvenNumber)

  4.  

  5.    println(evenNumbers)

  6. }

  7.  

  8. fun isEvenNumber(number: Int) = number % 2 == 0

  9.  

  10. /*

  11.    output = [2, 4, 6, 8, 10]

  12. */


Selain itu, kita juga bisa mereferensikan sebuah extensions function. Caranya dengan ikut menyertakan objek yang menjadi receivernya sebelum operator :: seperti berikut:

  1. fun main() {

  2.    val numbers = 1.rangeTo(10)

  3.    val evenNumbers = numbers.filter(Int::isEvenNumber)

  4.  

  5.    println(evenNumbers)

  6. }

  7.  

  8. fun Int.isEvenNumber() = this % 2 == 0

  9.  

  10. /*

  11.    output = [2, 4, 6, 8, 10]

  12. */



Property References

Selain digunakan untuk mereferensikan sebuah fungsi. Operator :: juga dapat digunakan untuk mereferensikan sebuah properti. Dengan Operator, kita bisa mengakses apa yang menjadi bagian dari properti tersebut seperti nama, fungsi setter getter, dll. Contohnya seperti berikut:

  1. var message = "Kotlin"

  2.  

  3. fun main() {

  4.    println(::message.name)

  5.    println(::message.get())

  6.  

  7.    ::message.set("Kotlin Academy")

  8.  

  9.    println(::message.get())

  10. }


Ekspresi ::message akan dievaluasi ke dalam objek dengan KMutableProperty yang memungkinkan kita untuk membaca nilainya dengan menggunakan get(), menetapkan nilai menggunakan set() dan mendapatkan nama dari properti tersebut menggunakan properti name.
Sedangkan untuk properti yang bersifat immutable seperti val message = “Kotlin”::message akan mengembalikan nilai dengan tipe KProperty, yang mana hanya terdapat fungsi get() di dalamnya.

  1. val message = "Kotlin"

  2.  

  3. fun main() {

  4.    println(::message.name)

  5.    println(::message.get())

  6.  

  7.    // ::message.set("Kotlin Academy") <- Error : Unresolved reference.

  8.  

  9.    println(::message.get())

  10. }


Untuk mengetahui lebih tentang KMutableProperty, Anda bisa membaca disini dan KProperty di sini

Posting Komentar

Cookie Consent
We serve cookies on this site to analyze traffic, remember your preferences, and optimize your experience.
Oops!
It seems there is something wrong with your internet connection. Please connect to the internet and start browsing again.
AdBlock Detected!
We have detected that you are using adblocking plugin in your browser.
The revenue we earn by the advertisements is used to manage this website, we request you to whitelist our website in your adblocking plugin.
Site is Blocked
Sorry! This site is not available in your country.