Kotlin Lambdas

Ungkapan Lambda

Ungkapan lambda atau sekadar lambda adalah fungsi tanpa nama; fungsi tanpa nama. Fungsi-fungsi ini diteruskan dengan segera sebagai ungkapan tanpa pernyataan. Sebagai contoh,

 fun main(args: Array) ( val greeting = ( println("Hello!")) // invoking function greeting() )

Semasa anda menjalankan program, outputnya adalah:

 Helo!

Di sini, ungkapan lambda diberikan kepada ucapan pemboleh ubah. Ungkapan tersebut tidak menerima parameter apa pun dan tidak mengembalikan nilai apa pun dalam program ini.

Kemudian, fungsi (ungkapan lambda) dipanggil sebagai:

 salam () 

Contoh: Lambda Dengan Parameter dan Jenis Pengembalian

Program di bawah ini mempunyai ungkapan lambda yang menerima dua bilangan bulat sebagai parameter, dan mengembalikan produk kedua bilangan bulat tersebut.

 fun main(args: Array) ( val product = ( a: Int, b: Int -> a * b ) val result = product(9, 3) println(result) )

Semasa anda menjalankan program, outputnya adalah:

 27

Di sini, ungkapan lambda adalah:

Perhatikan, ungkapan lambda tertutup di dalam pendakap keriting.

Fungsi Perintah Lebih Tinggi

Koltin mempunyai sokongan hebat untuk pengaturcaraan berfungsi. Anda boleh menyampaikan fungsi sebagai hujah ke fungsi lain. Anda juga boleh mengembalikan fungsi dari fungsi lain. Fungsi-fungsi ini dipanggil fungsi orde tinggi.

Selalunya, ungkapan lambda diteruskan ke fungsi urutan lebih tinggi (dan bukannya fungsi biasa) untuk kemudahan.

Contoh: Menyerahkan Lambda ke Fungsi

Mari sampaikan ungkapan lambda ke fungsi pesanan lebih tinggi. Inilah cara anda boleh melakukannya.

 fun callMe(greeting: () -> Unit) ( greeting() ) fun main(args: Array) ( callMe(( println("Hello!") )) )

Semasa anda menjalankan program, outputnya adalah:

 Helo!

Di sini, callMe()adalah fungsi pesanan tinggi (kerana ia berfungsi sebagai parameter). Parameter ucapan menerima lambda yang diteruskan ke callMe()fungsi sebagai:

 salam: () -> Unit

Tanda kurung kosong menunjukkan bahawa, fungsi tanpa nama lulus tidak menerima sebarang parameter. Kata Unitkunci menunjukkan bahawa fungsi tanpa nama tidak mengembalikan nilai.

Lambdas sering digunakan semasa bekerja dengan koleksi. Terdapat beberapa fungsi bawaan yang terdapat di perpustakaan standard yang menggunakan lambdas untuk memudahkan tugas kita. Anda akan melihat beberapa contoh di sini:

Contoh: Fungsi maxBy ()

Fungsi maxBy () mengembalikan elemen pertama yang menghasilkan nilai terbesar fungsi yang diberikan atau nulljika tidak ada unsur.

 data class Person(val name: String, val age: Int) fun main(args: Array) ( val people = listOf( Person("Jack", 34), Person("Shelly", 19), Person("Patrick", 13), Person("Jill", 12), Person("Shane", 22), Person("Joe", 18) ) val selectedPerson = people.maxBy(( person -> person.age )) println(selectedPerson) println("name: $(selectedPerson?.name)" ) println("age: $(selectedPerson?.age)" ) )

Semasa anda menjalankan program, outputnya adalah:

 Orang (nama = Jack, umur = 34) nama: Umur Jack: 34

Di sini, maxBy()fungsi mengambil senarai objek Person dan mengembalikan objek Person yang mempunyai usia maksimum.

it Keyword: Digunakan untuk Parameter Tunggal

Dalam program di atas, ekspresi lambda hanya menerima satu parameter (senarai objek Orang). Dalam kes sedemikian, anda boleh merujuk argumen dengan menggunakan kata kunci it.

Anda boleh menggantikan

 val selectPerson = people.maxBy ((orang -> orang.age))

dengan

 val selectPerson = people.maxBy ((it.age)) 

dalam program di atas.

Contoh: Fungsi maxBy () dan beginWith ()

Program di bawah ini mengira usia maksimum objek Orang bermula dengan huruf S.

Kami akan menggunakan dua fungsi perpustakaan maxBy()dan startsWith()untuk menyelesaikan tugas ini. Fungsi starsWith () kembali truejika dimulakan dengan watak yang ditentukan dilewatkan sebagai argumen.

 data class Person(val name: String, val age: Int) fun main(args: Array) ( val people = listOf( Person("Jack", 34), Person("Shelly", 19), Person("Patrick", 13), Person("Jill", 12), Person("Shane", 22), Person("Joe", 18) ) val selectedPerson = people .filter ( it.name.startsWith("S") ) .maxBy( it.age ) println(selectedPerson) println("name: $(selectedPerson?.name)" ) println("age: $(selectedPerson?.age)" ) )

Semasa anda menjalankan program, outputnya adalah:

 Orang (nama = Shane, umur = 22) nama: Umur Shane: 22

Bacaan yang Disyorkan

  • Penutupan Kotlin
  • Kotlin Dengan dan sapukan

Artikel menarik...