Kotlin Lambdas

Lambda výrazy

Lambda výraz nebo jednoduše lambda je anonymní funkce; funkce bez názvu. Tyto funkce jsou předány okamžitě jako výraz bez deklarace. Například,

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

Když spustíte program, výstup bude:

 Ahoj!

Zde je výrazu lambda přiřazen proměnný pozdrav. Výraz nepřijímá žádné parametry a nevrací žádnou hodnotu v tomto programu.

Potom je funkce (výraz lambda) vyvolána jako:

 Pozdrav() 

Příklad: Lambda s parametry a návratovým typem

Níže uvedený program má výraz lambda, který přijímá dvě celá čísla jako parametry a vrací součin těchto dvou celých čísel.

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

Když spustíte program, výstup bude:

 27

Zde je výraz lambda:

Všimněte si, že výraz lambda je uzavřen uvnitř složených závorek.

Funkce vyššího řádu

Koltin má velkou podporu pro funkční programování. Můžete předat funkce jako argumenty jiným funkcím. Můžete také vrátit funkci z jiných funkcí. Tyto funkce se nazývají funkce vyššího řádu.

Často jsou výrazy lambda pro větší pohodlí předávány funkci vyššího řádu (spíše než typické funkci).

Příklad: Předání lambdy funkci

Pojďme předat lambda výraz funkci vyššího řádu. Zde je návod, jak to udělat.

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

Když spustíte program, výstup bude:

 Ahoj!

Zde callMe()je funkce vyššího řádu (protože bere funkci jako parametr). Parametr pozdrav přijímá lambdu předanou callMe()funkci jako:

 pozdrav: () -> Jednotka

Prázdná závorka naznačuje, že předaná anonymní funkce nepřijímá žádné parametry. A je Unitklíčové slovo naznačují, že anonymní funkce nevrací žádnou hodnotu.

Lambdy se často používají při práci se sbírkami. A ve standardní knihovně je k dispozici několik vestavěných funkcí, které nám lambdas usnadňují. Zde uvidíte několik příkladů:

Příklad: funkce maxBy ()

Funkce maxBy () vrací první prvek poskytující největší hodnotu dané funkce nebo nullpokud nejsou žádné prvky.

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

Když spustíte program, výstup bude:

 Osoba (jméno = Jack, věk = 34) jméno: Jack věk: 34

Zde maxBy()funkce vezme seznam Person objektů a vrátí Person objekt s maximálním věkem.

it Klíčové slovo: Používá se pro jeden parametr

Ve výše uvedeném programu přijímá výraz lambda pouze jeden parametr (seznam objektů Person). V takových případech můžete argument odkázat pomocí klíčového slova it.

Můžete vyměnit

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

s

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

ve výše uvedeném programu.

Příklad: funkce maxBy () a startsWith ()

Níže uvedený program spočítá maximální věk objektu osoby začínající písmenem S.

Budeme používat dva knihovní funkce maxBy()a startsWith()ke splnění tohoto úkolu. Funkce starsWith () se vrací, truepokud začíná zadaným znakem předaným jako argument.

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

Když spustíte program, výstup bude:

 Osoba (jméno = Shane, věk = 22) jméno: Shane věk: 22

Doporučené četby

  • Kotlinské uzávěry
  • Kotlin S a přihlaste se

Zajímavé články...