Belajar Function Type di Kotlin

Dhe997


Function Type

Pada modul sebelumnya, kita sudah mempelajarinya tentang higher-order function, di mana kita bisa melampirkan sebuah fungsi sebagai sebuah argumen. Ketika kita mendeklarasikan sebuah higher-order function, maka kita perlu menentukan tipe deklarasi dari fungsi yang menjadi parameter.

Kotlin sendiri menggunakan function type untuk tipe deklarasi yang berhubungan dengan sebuah fungsi. Dalam penggunaannya, terdapat beberapa tanda yang berhubungan dengan sebuah fungsi seperti jumlah dan tipe parameter serta tipe kembalian.

  1. (Int, Int) -> String


Setiap function type memiliki tanda kurung . Di dalamnya terdapat sebuah parameter dan jumlah tipe yang menandakan jumlah parameter dari fungsi tersebut. Pada contoh di atas, fungsi tersebut memiliki 2 (dua) parameter dengan tipe Int dan memiliki tipe kembalian String. Ketika kita tidak ingin fungsi tersebut mengembalikan nilai, kita bisa menggunakan Unit. Berbeda dengan fungsi pada umumnya, jika menggunakan tipe kembalian Unit, kita wajib menuliskannya.
Ketika kita mempunyai beberapa fungsi yang memiliki function type yang sama, kita bisa menyederhanakannya. Bagaimana caranya? Manfaatkan kata kunci typealias untuk memberikan nama alternatif dari sebuah function type seperti berikut:

  1. typealias Arithmetic = (Int, Int) -> Int

  2.  

  3. val sum: Arithmetic = { valueA, valueB -> valueA + valueB }

  4.  

  5. val multiply: Arithmetic = { valueA, valueB -> valueA * valueB }


typealias cocok digunakan ketika kita mempunyai sebuah function type yang panjang. Dengannya, kita bisa memberikan nama untuk sebuah function type dan menggunakannya sebagai tipe untuk fungsi lainnya.
Untuk membuat instance dari sebuah function type, terdapat beberapa cara. Salah satunya dengan lambda expression yang sudah kita bahas pada modul sebelumnya.
Sedangkan untuk menggunakan instance-nya, kita bisa memanfaatkan operator invoke() seperti berikut:

  1. val sumResult = sum.invoke(10, 10)

  2. val multiplyResult = multiply.invoke(20, 20)


Atau kita bisa menuliskannya secara langsung dengan menghilangkan operator invoke():

  1. val sumResult = sum(10, 10)

  2. val multiplyResult = multiply(20, 20)


Kita juga bisa menandai function type sebagai nullable dengan menempatkannya di dalam tanda kurung dan diakhiri dengan safe call seperti berikut:

  1. typealias Arithmetic = ((Int, Int) -> Int)?

  2. val sum: Arithmetic = { valueA, valueB -> valueA + valueB }


Berikut adalah contoh penggunaan function type yang ditandai sebagai nullable:

  1. sum?.invoke(10, 20)


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.