Kotlin Lambdas

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 Unitavainsana 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 nulljos 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, truejos 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

Mielenkiintoisia artikkeleita...