Kotlin Lambdas

Lambda výrazy

Lambda výraz alebo jednoducho lambda je anonymná funkcia; funkcia bez názvu. Tieto funkcie sa odovzdajú okamžite ako výraz bez deklarácie. Napríklad,

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

Po spustení programu bude výstup:

 Ahoj!

Tu je výrazu lambda priradený premenný pozdrav. Výraz neakceptuje žiadne parametre a nevracia žiadnu hodnotu v tomto programe.

Potom sa funkcia (výraz lambda) vyvolá ako:

 pozdrav () 

Príklad: Lambda s parametrami a návratovým typom

Program uvedený nižšie má výraz lambda, ktorý ako parametre prijíma dve celé čísla a vracia súčin týchto dvoch celých čísel.

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

Po spustení programu bude výstup:

 27

Výraz lambda je tu:

Upozorňujeme, že vo vnútri zložených zátvoriek je uzavretý výraz lambda.

Funkcia vyššieho rádu

Koltin má veľkú podporu pre funkčné programovanie. Funkcie môžete odovzdať ako argumenty iným funkciám. Môžete tiež vrátiť funkciu z iných funkcií. Tieto funkcie sa nazývajú funkcie vyššieho rádu.

Výrazy lambda sa často kvôli pohodlnosti odovzdávajú funkcii vyššieho rádu (a nie typickej funkcii).

Príklad: Prenesenie lambdy do funkcie

Poďme odovzdať výraz lambda funkcii vyššieho rádu. Takto to môžete urobiť.

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

Po spustení programu bude výstup:

 Ahoj!

Tu callMe()je funkcia vyššieho rádu (pretože funkciu berie ako parameter). Parameter pozdrav prijíma lambdu odovzdanú callMe()funkcii ako:

 pozdrav: () -> Jednotka

Prázdna zátvorka naznačuje, že odovzdaná anonymná funkcia neprijíma žiadne parametre. A je Unitkľúčové slovo naznačujú, že anonymný funkcia nevracia žiadnu hodnotu.

Lambdy sa často používajú pri práci so zbierkami. V štandardnej knižnici je k dispozícii niekoľko zabudovaných funkcií, ktoré pomocou lambdas uľahčujú vykonávanie našich úloh. Tu uvidíte niekoľko príkladov:

Príklad: funkcia maxBy ()

Funkcia maxBy () vráti prvý prvok, ktorý poskytne najväčšiu hodnotu danej funkcie alebo nullak neexistujú žiadne 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)" ) )

Po spustení programu bude výstup:

 Osoba (meno = Jack, vek = 34) meno: Jack vek: 34

Tu maxBy()funkcia prevezme zoznam objektov Person a vráti objekt Person s maximálnym vekom.

it Kľúčové slovo: Používa sa pre jeden parameter

Vo vyššie uvedenom programe výraz lambda akceptuje iba jeden parameter (zoznam objektov Person). V takýchto prípadoch môžete argument odkázať pomocou kľúčového slova it.

Môžete nahradiť

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

s

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

vo vyššie uvedenom programe.

Príklad: funkcia maxBy () a startsWith ()

Program uvedený nižšie počíta maximálny vek objektu osoby začínajúci sa písmenom S.

Budeme používať dva knižničný funkcie maxBy()a startsWith()na splnenie tejto úlohy. Funkcia starsWith () sa vráti, trueak začína zadaným znakom odovzdaným ako 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)" ) )

Po spustení programu bude výstup:

 Osoba (meno = Shane, vek = 22) meno: Shane vek: 22

Odporúčané čítania

  • Kotlinove uzávery
  • Kotlin S a podať žiadosť

Zaujímavé články...