Котлин Ламбдас

Ламбда изрази

Ламбда израз или просто ламбда е анонимна функция; функция без име. Тези функции се предават незабавно като израз без декларация. Например,

 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 () и започваWith () функция

Програмата по-долу изчислява максималната възраст на обект 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

Препоръчителни четива

  • Котлин затваряния
  • Kotlin С и кандидатствайте

Интересни статии...