Kotlin Academy · Oppitunti

Lambda-funktioiden välittäminen funktioille

Välittäkää lambdoja argumentteina ja käyttäkää trailing lambda -syntaksia.

Oppitunti 2/413 vaihetta

Lambda-funktioiden välittäminen funktioille on ilmainen Kotlin Academy-oppitunti CoddyKitissä. Tämä on oppitunti 2/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Kotlin Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Kotlin Academy-kurssilla on yhteensä 4 oppituntia.

Lambdoja vastaanottavat funktiot

Korkeamman asteen funktio ottaa funktion, kuten lambdan, parametriksi. Näin toimivat esimerkiksi map, filter ja forEach.

Korkeamman asteen funktion määrittäminen

Käyttäkää funktion tyyppiä parametrin tyyppinä.
fun applyTwice(n: Int, op: (Int) -> Int): Int {
    return op(op(n))
}
println(applyTwice(3, { it * 2 }))  // 12

Jälkimmäinen lambda-syntaksi

Jos viimeinen parametri on funktio, voitte siirtää lambdan sulkeiden ulkopuolelle. Tätä kutsutaan trailing lambda -syntaksiksi.
fun applyTwice(n: Int, op: (Int) -> Int) = op(op(n))

// Standard:
applyTwice(3, { it * 2 })
// Trailing lambda:
applyTwice(3) { it * 2 }

Jälkimmäinen lambda ilman sulkeita

Kun lambda on ainoa argumentti, voitte jättää sulkeet kokonaan pois.
fun execute(block: () -> Unit) = block()

// With parens:
execute({ println("Hello") })
// Without parens (idiomatic):
execute { println("Hello") }

Lambda-muuttujan välittäminen

Voitte välittää tallennetun lambdaviitteen käyttämällä sen muuttujan nimeä.
val double = { n: Int -> n * 2 }
fun applyTwice(n: Int, op: (Int) -> Int) = op(op(n))
println(applyTwice(5, double))  // 20

Funktioviitteet muodolla ::

Käyttäkää merkintää :: välittääksenne nimetyn funktion lambdan kanssa yhteensopivana argumenttina.
fun triple(n: Int) = n * 3
fun applyTwice(n: Int, op: (Int) -> Int) = op(op(n))
println(applyTwice(2, ::triple))  // 18

Useita lambda-parametreja

Funktio voi vastaanottaa useita lambda-parametreja. Vain viimeisessä voidaan käyttää trailing lambda -syntaksia.
fun transform(
    value: Int,
    before: (Int) -> Int,
    after: (Int) -> Int
) = after(before(value))

println(transform(5, { it * 2 }, { it + 1 }))  // 11

Lambdan välittäminen filter-funktiolle

filter hyväksyy predikaattilambdan eli funktion, joka muuntaa alkion arvoksi Boolean.
val numbers = listOf(1, 2, 3, 4, 5, 6)
val evens = numbers.filter { it % 2 == 0 }
println(evens)  // [2, 4, 6]

Korkeamman asteen funktioiden ketjuttaminen

Ketjuttamalla useita korkeamman asteen funktiokutsuja voitte muodostaa ilmaisuvoimaisia tietoputkia.
val result = (1..10)
    .filter { it % 2 != 0 }  // odds
    .map { it * it }          // square
    .take(3)                  // first 3
println(result)  // [1, 9, 25]

Muuttujien kaappaaminen lambdassa

Lambdat voivat kaapata muuttujia ympäröivästä näkyvyysalueesta (sulkeuma). Kotlinissa ne voivat jopa kaapata ja muuttaa var-muuttujaa.
var total = 0
listOf(1, 2, 3, 4).forEach { total += it }
println(total)  // 10

Lambdan palauttaminen funktiosta

Korkeamman asteen funktiot voivat myös palauttaa lambdoja, jolloin voidaan luoda tehdasfunktioita.
fun multiplierOf(factor: Int): (Int) -> Int {
    return { n -> n * factor }
}
val double = multiplierOf(2)
val triple = multiplierOf(3)
println(double(5))  // 10
println(triple(5))  // 15

Pikakoe

Milloin lambdan voi siirtää sulkeiden ulkopuolelle trailing lambda -syntaksia käyttäen?

Kertaus

Korkeamman asteen funktiot vastaanottavat lambdoja parametreina. Trailing lambda -syntaksi siirtää lambdan sulkeiden ulkopuolelle, kun se on viimeinen. :: välittää nimetyn funktioviitteen. Seuraavaksi: implisiittinen 'it'-parametri!
Aloita maksutta

Opi Kotlin tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
51
Oppitunnit
203

Usein kysytyt kysymykset

Onko oppitunti ”Lambda-funktioiden välittäminen funktioille” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Kotlin Academy-oppimispolun 3 oppituntia, myös oppitunnin “Lambda-funktioiden välittäminen funktioille”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Kotlin Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Lambda-funktioiden välittäminen funktioille”?

Välittäkää lambdoja argumentteina ja käyttäkää trailing lambda -syntaksia. Harjoittelet Kotlin Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Kotlin Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Kotlin Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.

Kuinka kauan ”Lambda-funktioiden välittäminen funktioille”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Kotlin Academy-oppitunnilla?

Kyllä. Jokainen Kotlin Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Mikä lambda on? Syntaksi ja tyypit
  2. Lambda-funktioiden välittäminen funktioille
  3. it: implisiittinen parametri
  4. filter, map ja find kokoelmilla
← Takaisin: Kotlin Academy