Higher-Order Function
Dalam mendeklarasi lambda, khususnya jika ingin ditetapkan agar dapat mengembalikan nilai, terkadang kompiler tidak dapat menentukan tipenya. Alhasil, kita perlu menuliskannya secara eksplisit. Terdapat beberapa tipe deklarasi yang dapat kita gunakan untuk mendeklarasi lambda, antara lain:
- var sum: (Int) -> Int = { value -> value + value }
Tipe deklarasi pada kode di atas adalah contoh ketika kita ingin menetapkan jika fungsi tersebut memiliki 1 (satu) parameter dengan tipe kembalian Int. Untuk tipe deklarasi lainnya akan kita bahas pada modul berikutnya.
Dengan ditetapkannya tipe deklarasi pada fungsi tersebut, memungkinkan kita untuk bisa menggunakannya sebagai argumen untuk fungsi lainnya. Contohnya seperti berikut:
- fun main() {
- printResult(10 ,sum)
- }
- fun printResult(value: Int, sum: (Int) -> Int) {
- val result = sum(value)
- println(result)
- }
- var sum: (Int) -> Int = { value -> value + value }
- /*
- output : 20
- */
Atau kita bisa melampirkannya secara langsung ketika fungsi printResult() di atas dipanggil seperti berikut:
- fun main() {
- printResult(10){ value ->
- value + value
- }
- }
- fun printResult(value: Int, sum: (Int) -> Int) {
- val result = sum(value)
- println(result)
- }
- /*
- output : 20
- */
Konsep ini dinamakan sebagai Higher-Order Function, yaitu sebuah fungsi yang menggunakan fungsi lainnya sebagai parameter, menjadikan tipe kembalian, ataupun keduanya. Yang perlu diperhatikan adalah, jika argumen terakhir dari fungsi merupakan sebuah lambda expression, maka lambda expression tersebut ditempatkan di luar parenthesis seperti pada contoh kode di atas
Posting Komentar