Lambda expression, biasa disebut dengan anonymous function atau function literal adalah fitur yang cukup populer sampai sekarang dalam dunia functional programming. Bisa disebut sebagai anonymous karena lambda tidak memiliki sebuah nama seperti halnya sebuah fungsi pada umumnya. Karena merupakan sebuah fungsi, lambda juga dapat memiliki daftar parameter, body dan return type. Istilah lambda sendiri berasal dari istilah akademis lambda calculus yang digunakan untuk menggambarkan proses komputasi.
Sebelum mempelajarinya lebih dalam, ada baiknya jika kita tahu beberapa karakteristik dari lambda berikut:
Dari beberapa karakteristik di atas, lambda sangat berguna karena dapat membuat penulisan kode menjadi lebih mudah dan sederhana. Salah satu contohnya adalah kita bisa menghindari boilerplate code dalam menggunakan anonymous class seperti berikut:
1. val comparator = object :Runnable{ 2. override fun run() { 3. // TODO: 4. } 5. }
Dengan lambda, kita bisa menyederhanakannya menjadi seperti di bawah ini:
1. val comparator = Runnable { 2. // TODO: 3. }
Setelah mengetahui apa itu lambda dan karakteristiknya, bagaimana cara mendeklarasikannya? Perhatikan contoh kode di bawah ini.
1. val message = { println("Hello From Lambda") }
Kode di atas adalah contoh deklarasi dari lambda, di mana fungsi lambda di atas ditandai dengan sepasang kurung kurawal. Di dalamnya terdapat fungsi untuk mencetak teks pada konsol. Ketika ingin menggunakannya, kita bisa memanggilnya seperti halnya kita memanggil sebuah fungsi pada umumnya.
1. fun main() { 2. message() 3. } 4. 5. val message = { println("Hello From Lambda") } 6. 7. /* 8. output : Hello From Lambda 9. */
Jika kita ingin menambahkan sebuah parameter pada fungsi lambda, kita bisa menuliskannya seperti berikut:
1. fun main() { 2. printMessage("Hello From Lambda") 3. } 4. 5. val printMessage = { message: String -> println(message) } 6. 7. /* 8. output : Hello From Lambda 9. */
Seperti yang disebutkan sebelumnya, parameter dari sebuah lambda berada di dalam kurung kurawal. Untuk membedakannya dengan body, daftar parameter yang ada dipisahkan dengan tanda ->. Kemudian, bagaimana cara mendeklarasi lambda agar dapat mengembalikan nilai? Untuk itu kita bisa menuliskannya seperti di bawah ini:
1. fun main() { 2. val length = messageLength("Hello From lambda") 3. println("Message length $length") 4. } 5. 6. val messageLength = { message: String -> message.length } 7. 8. /* 9. output : Message length 17 10. */