Beleška Kotlin
Објављено 29 May 2022
Dobri linkovi
Разноразно парче кода
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
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 |
|
Употреба |
Функција`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`Ово је елегантан начин да се изврше операције над објектом, док се добије изведени резултат, док се чува интегритет оригиналног објекта.