다양한 코드 조각

맵리듀스

바이트 리스트를 문자열 리스트로 변환하고 문자열 리스트를 요약합니다.
연결이 포함된 문자열 안 요청(requestBodyContent:byte[])가 전송된 것을 어떻게 로그하나요?

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

enum 및 sealed 클래스

함수형 인터페이스와 메서드 참조

엔티티를 DTO 도메인 모델로 변환하는 참조 메서드(함수형 스타일, Java 8)를 사용할 수 있다.

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

하나https://stackoverflow.com/a/22245383/837404[좋은 설명]

표준 출력 캡처

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() }
}

Kotlin에서 apply, run, let, also, use, with의 차이는 무엇인가요?

Kotlin 함수 비교 및 람다 형식 사용 참고

적용하다

서론 Kotlin 함수들`apply`, run, let, also, use, et `with`다른 방법으로 객체를 처리할 수 있는 방법을 제공합니다. 각각은 자체 사용 사례와 동작을 가집니다. 게다가, 람다 참조 형태는 기존 람다 함수를 참조함으로써 코드를 더 가독성 있고 재사용 가능하게 만들 수 있습니다.

함수`apply`생성 중에 객체를 구성하는 데 사용됩니다. 호출된 객체를 반환합니다.

람다 참조 예시 :

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

람다를 사용한 예시 :

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

run

함수`run`객체에서 코드 블록을 실행하여 그 결과를 반환하는 데 사용됩니다.

람다 참조 예시 :

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

함수`let`객체에서 코드 블록을 실행하고 코드 블록의 결과를 반환하는 데 사용됩니다.

예시와 람다 참조 :

val result = someObject.let(::processObject)

람다와 함께 예시 :

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

또한

함수`also`객체에 추가적인 작업을 수행하고, 호출된 객체를 반환하는 데 사용됩니다.

람다 참조 예시 :

someObject.also(::performAdditionalAction)

람다 예시 :

someObject.also {
// action additionnelle sur someObject
}

사용

함수`use`는 사용 후 닫아야 하는 리소스를 다룰 때 사용됩니다. 자동으로 함수를 호출합니다.`close`블록의 끝에.

람다 참조 예시 :

someResource.use(::useResource)

람다와 함께하는 예시 :

someResource.use {
// travailler avec la ressource
}

와 함께

함수`with`는 여러 메서드를 객체에 대해 호출할 때 이름을 반복하지 않도록 사용되며, 마지막 식의 결과를 반환합니다.

예시와 lambda reference :

val result = with(someObject, ::processWithObject)

람다를 사용한 예시 :

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

람다 참조 형태 또는 블록을 사용해`{}`, 로직을 별도의 함수에 캡슐화할 수 있습니다, 이를 통해 코드의 가독성과 재사용성을 향상시킵니다.

let Function에서 Kotlin

let이 객체에 적용된 부작용과 함께 객체를 반환하는지, 아니면 입력의 초기 상태 그대로 반환하는지, (let)에 따라 달라지나요 ?

함수`let`Kotlin에서 개체에 대한 작업을 수행하고 다른 결과를 반환하는 데 사용됩니다. 그러나 함수에 대해 주목할 중요한 점이 있습니다.`let`호출된 객체의 초기 상태를 수정하지 않습니다.

서명

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

사용

함수`let`이는 객체에 변형을 적용하고 그 변형을 기반으로 결과를 얻는 데 일반적으로 사용됩니다.

결과

함수에서 반환된 값`let`는 인수로 전달된 lambda 표현식의 결과이며, 일반적으로 객체에서 수행된 작업의 결과입니다.

부작용

함수이지만`let`람다 표현식에서 사용될 때 객체에 부작용을 일으킬 수 있지만, 객체의 초기 상태를 수정하지는 않는다.

따라서, 함수`let`객체에 대한 작업을 수행하면서 파생된 결과를 얻면서 원래 객체의 무결성을 보존하는 한 가지 우아한 방법이다.

관련 기사