Разноразно парче кода

map reduce

Konvertovati listu bajtova u listu stringova i sažeti listu stringova
у низу који садржи конкатенацију. Kako logger request poslat(requestBodyContent:byte[])

log.info(
    requestBodyContent!!.map { it.toInt().toChar().toString() }
        .reduce { request: String, s: String -> request + s }
)

enum i zaključene klase

функционални интерфејс и референца методе

Možemo da preobrazimo entitet u model domena DTO sa referentnom metodom (funkcionalni stil - Java 8)

fun findAllByLoginNot(
        pageable:Pageable,
        login:String)
    :Page<UserDto> {
    return userDao.findAllByLoginNot(
                    pageable,
                    login).map(::fromEntity)
}

jedanhttps://stackoverflow.com/a/22245383/837404[добра објашњење]

Uhvati standardni izlaz

package functional

import java.io.ByteArrayOutputStream
import java.io.PrintStream
import java.lang.System.out
import java.lang.System.setOut
import kotlin.test.AfterTest
import kotlin.test.BeforeTest
import kotlin.test.Test
import kotlin.test.assertEquals


class BasicsHOF {
    private val standardOut: PrintStream? = out
    private val outputStreamCaptor = ByteArrayOutputStream()

    @BeforeTest
    fun setUp() = setOut(PrintStream(outputStreamCaptor))

    @AfterTest
    fun tearDown() = setOut(standardOut)

    @Test
    fun `three times dope`() {

        3.times { println("Hello") }

        assertEquals(
            buildString {
                repeat(3) { append("Hello\n") }
                deleteAt(length - 1)
            }, outputStreamCaptor
                .toString()
                .trim()
        )
    }

    fun Int.times(fn: () -> Unit) = (1..this).forEach { _ -> fn() }
}

Koje je razlika u Kotlinu između apply, run, let, also, use i with?

Poređenje Kotlin funkcija i korišćenje lambda oblika Reference

primeni

Увод Kotlin funkcije`apply`, run, let, also, use, et `with`pružaju različite načine za obradu objekata. Svaka ima svoje slučajeve korišćenja i ponašanje. Dodatno, lambda reference oblika omogućavaju da kod bude čitljiviji i ponovnog korišćenja kroz referenciranje na postojeće lambda funkcije.

Funkcija`apply`se koristi za podešavanje objekta tokom njegovog kreiranja. Vraća objekat na kom je pozvana.

Пример са lambda референцом

val someObject = SomeClass().apply(::configureObject)

Пример са ламбда :

val someObject = SomeClass().apply {
// configuration des propriétés de someObject
}

pokreni

Funkcija`run`Se koristi za izvršavanje bloka koda na objektu i vraća rezultat bloka koda.

Primer sa lambda reference :

val result = someObject.run(::someFunction)

Пример са lambda :

val result = someObject.run {
// bloc de code à exécuter sur someObject
// la dernière expression est renvoyée
}

let

Funkcija`let`Koristi se za izvršavanje bloka koda na objektu i vraća rezultat bloka koda.

Пример са lambda reference :

val result = someObject.let(::processObject)

Пример са лямбда :

val result = someObject.let {
// bloc de code à exécuter sur someObject
// la dernière expression est renvoyée
}

takođe

Функција`also`se koristi za izvršenje dodatne akcije nad objekatom i vraća objekat na kojem je pozvana.

Primer sa lambda referencom

someObject.also(::performAdditionalAction)

Пример са ламбда :

someObject.also {
// action additionnelle sur someObject
}

koristi

Funkcija`use`se koristi za rad sa resursima koje je potrebno zatvoriti nakon korišćenja. Automatski poziva funkciju`close`na kraju bloka.

Primer sa lambda referencom :

someResource.use(::useResource)

Пример са ламбда :

someResource.use {
// travailler avec la ressource
}

са

funkcija`with`se koristi za pozivanje više metoda na objektu bez ponavljanja imena i vraća rezultat poslednje izraza.

Primer sa lambda referencom :

val result = with(someObject, ::processWithObject)

Пример са lambda :

val result = with(someObject) {
// appeler des méthodes sur someObject
// la dernière expression est renvoyée
}

Korišćenjem oblika lambda referenca ili blokova`{}`, Možete enkapsulirati logiku u zasebne funkcije, poboljšavajući čitljivost i ponovnu upotrebu koda.

Да ли let враћа објекат са побоследствима које су извршене над њим или у почетном стању улаза зависимо од let ?

let Function u Kotlin

Funkcija`let`u Kotlin se koristi za izvođenje operacija nad objektom i vraćanje različitog rezultata. Ipak, važno je napomenuti da funkcija`let`Ne menja početno stanje objekta na kojoj je pozvana.

Potpis

inline fun <T, R> T.let(block: (T) → R): R

Употреба

Функција`let`Често се користи за примену трансформација на објекат и добијање резултата базираног на тим трансформацијама.

Резултат

Vrednost vraćena funkcijom`let`je rezultat lambda izraza prosleđen kao argument, običajno je rezultat operacija izvršenih nad objektom.

Spoljni efekti

Iako je funkcija`let`Može da ima stranih efekata na objekat kada se koristi u lambda izrazu, ali ne menja početno stanje objekta samog.

Stoga, funkcija`let`Ово је елегантан начин да се изврше операције над објектом, док се добије изведени резултат, док се чува интегритет оригиналног објекта.

Повезани чланци