Котлін Лямбдас

Лямбда-вирази

Лямбда-вираз або просто лямбда є анонімною функцією; функція без імені. Ці функції передаються негайно як вираз без оголошення. Наприклад,

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

Коли ви запускаєте програму, результат буде:

 Привіт!

Тут лямбда-вираз призначається змінному привітанню. Вираз не приймає жодних параметрів і не повертає жодного значення в цій програмі.

Потім функція (лямбда-вираз) викликається як:

 привітання () 

Приклад: лямбда з параметрами та типом повернення

У наведеній нижче програмі є лямбда-вираз, який приймає два цілі числа як параметри і повертає добуток цих двох цілих чисел.

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

Коли ви запускаєте програму, результат буде:

 27

Тут вираз лямбда:

Зверніть увагу, лямбда-вираз укладено всередині фігурних дужок.

Функція вищого порядку

Koltin має чудову підтримку функціонального програмування. Ви можете передавати функції як аргументи іншим функціям. Крім того, ви можете повернути функцію з інших функцій. Ці функції називаються функціями вищого порядку.

Часто лямбда-вирази для зручності передаються функції вищого порядку (а не типовій функції).

Приклад: передача лямбди функції

Передамо лямбда-вираз функції вищого порядку. Ось як ви можете це зробити.

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

Коли ви запускаєте програму, результат буде:

 Привіт!

Тут callMe()функція вищого порядку (оскільки вона приймає функцію як параметр). Параметр привітання приймає лямбду, передану callMe()функції, як:

 привітання: () -> Одиниця

Порожні дужки припускають, що передана анонімна функція не приймає жодних параметрів. І Unitключове слово припускає, що анонімна функція не повертає жодного значення.

Лямбди часто використовують під час роботи з колекціями. І в стандартній бібліотеці є кілька вбудованих функцій, які беруть лямбди, щоб полегшити наше завдання. Ви побачите кілька прикладів тут:

Приклад: функція maxBy ()

Функція maxBy () повертає перший елемент, що дає найбільше значення даної функції або nullякщо елементів немає.

 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)" ) )

Коли ви запускаєте програму, результат буде:

 Особа (ім'я = Джек, вік = 34) ім'я: Джек вік: 34

Тут maxBy()функція бере список об'єктів Person і повертає об'єкт Person, що має максимальний вік.

it Ключове слово: використовується для одного параметра

У наведеній вище програмі лямбда-вираз приймає лише один параметр (список об’єктів Person). У таких випадках ви можете посилатися на аргумент, використовуючи ключове слово it.

Ви можете замінити

 val selectedPerson = people.maxBy ((person -> person.age))

з

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

у вищезазначеній програмі.

Приклад: maxBy () та функція startWith ()

Програма нижче обчислює максимальний вік об’єкта Person, починаючи з літери S.

Ми використаємо дві функції бібліотеки maxBy()і startsWith()для виконання цього завдання. Функція starsWith () повертається, trueякщо вона починається із зазначеного символу, переданого як аргумент.

 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)" ) )

Коли ви запускаєте програму, результат буде:

 Особа (ім'я = Шейн, вік = 22) ім'я: Шейн вік: 22

Рекомендовані читання

  • Котлін Закриття
  • Котлін С і подати заявку

Цікаві статті...