Lambda-lausekkeet
Lambda-ilmaisu tai yksinkertaisesti lambda on anonyymi toiminto; funktio ilman nimeä. Nämä toiminnot välitetään välittömästi lausekkeena ilman ilmoitusta. Esimerkiksi,
fun main(args: Array) ( val greeting = ( println("Hello!")) // invoking function greeting() )
Kun suoritat ohjelmaa, tulos on:
Hei!
Tässä lambda-lauseke osoitetaan muuttuvalle tervehdykselle. Lauseke ei hyväksy mitään parametreja eikä palauta arvoa tässä ohjelmassa.
Sitten funktio (lambda-lauseke) kutsutaan nimellä:
tervehdys()
Esimerkki: Lambda parametreilla ja palautustyypillä
Alla olevassa ohjelmassa on lambda-lauseke, joka hyväksyy kaksi kokonaislukua parametreina ja palauttaa näiden kahden kokonaisluvun tulon.
fun main(args: Array) ( val product = ( a: Int, b: Int -> a * b ) val result = product(9, 3) println(result) )
Kun suoritat ohjelmaa, tulos on:
27
Tässä lambda-ilmaisu on:
Huomaa, että lambda-ilmaisu on suljettu kiharoiden aaltosulkeiden sisään.
Korkeamman tilauksen toiminto
Koltinilla on suuri tuki toiminnalliselle ohjelmoinnille. Voit välittää funktiot argumentteina muille funktioille. Voit myös palauttaa toiminnon muista toiminnoista. Näitä toimintoja kutsutaan korkeamman asteen funktioiksi.
Usein lambda-lausekkeet välitetään korkeamman asteen funktiolle (tyypillisen funktion sijaan) mukavuuden vuoksi.
Esimerkki: Lambdan välittäminen toimintoon
Siirretään lambda-lauseke korkeamman asteen funktiolle. Näin voit tehdä sen.
fun callMe(greeting: () -> Unit) ( greeting() ) fun main(args: Array) ( callMe(( println("Hello!") )) )
Kun suoritat ohjelmaa, tulos on:
Hei!
Tässä callMe()
on korkeamman asteen funktio (koska se ottaa funktion parametrina). Tervehdysparametri hyväksyy callMe()
funktiolle välitetyn lambda :
tervehdys: () -> Yksikkö
Tyhjät sulut viittaavat siihen, että välitetty anonyymi toiminto ei hyväksy mitään parametreja. Ja Unit
avainsana ehdottaa, että nimetön toiminto ei palauta arvoa.
Lambdoja käytetään usein kokoelmia käsiteltäessä. Ja vakiokirjastossa on useita sisäänrakennettuja toimintoja, jotka ottavat lambdat helpottamaan tehtäväämme. Näet muutaman esimerkin täältä:
Esimerkki: maxBy () -funktio
MaxBy () -funktio palauttaa ensimmäisen elementin, jolla saadaan suurin funktion arvo tai null
jos elementtejä ei ole.
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)" ) )
Kun suoritat ohjelmaa, tulos on:
Henkilön (nimi = Jack, ikä = 34) nimi: Jackin ikä: 34
Tässä maxBy()
funktio ottaa luettelon henkilöobjekteista ja palauttaa henkilöobjektin, jolla on enimmäisikä.
it Avainsana: Käytetään yksittäisiin parametreihin
Edellä olevassa ohjelmassa lambda-lauseke hyväksyy vain yhden parametrin (luettelo Henkilö-objekteista). Tällaisissa tapauksissa voit viitata argumenttiin käyttämällä avainsanaa it
.
Voit korvata
val selectedPerson = people.maxBy ((henkilö -> henkilö. ikä))
kanssa
val selectedPerson = people.maxBy ((it.age))
yllä olevassa ohjelmassa.
Esimerkki: maxBy () ja käynnistyy () -toiminnolla
Alla oleva ohjelma laskee kirjaimella S alkavan Henkilökohteen enimmäisikän.
Käytämme kahta kirjastotoimintoa maxBy()
ja startsWith()
tämän tehtävän suorittamiseen. Funktio starsWith () palauttaa, true
jos se alkaa määritetyllä merkillä, joka välitetään argumenttina.
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)" ) )
Kun suoritat ohjelmaa, tulos on:
Henkilön (nimi = Shane, ikä = 22) nimi: Shane-ikä: 22
Suositeltavat lukemat
- Kotlin Sulkimet
- Kotlin With ja hae