#36 Kotlin Koans Builders/Function literals with reciever 해설

1 소개



Kotlin 공식 레퍼런스의 Kotlin Koans Builders/Function literals with reciever의 해설 기사입니다.

Kotlin Koans를 통해 Kotlin을 배우는 사람들의 도움이 되길 바랍니다.

다만, 레퍼런스를 자력으로 읽는 힘을 기르고 싶은 분은,
곧이 기사를 보지 마십시오!

한 번 각자로 도전하고 나서, 눈에 띄게 된다고 생각합니다

2 수신기



먼저 실제 예를 살펴 보겠습니다.

Example
val sum: Int.(Int) -> Int = { other -> plus(other) }

위의 예에서 1번 왼쪽의 Int를 리시버라고 합니다.
(왼쪽에서 두 번째 Int는 인수 형식을, 왼쪽에서 세 번째 Int는 반환 형식을 나타냅니다.)

즉,

리시버는 함수 유형 호출의 원래 인스턴스 유형을 지정합니다.

3 Builders/Function literals with reciever 설명



Kotlin Koans Builders/Function literals with receiver의 해설입니다.
수시로 본 사이트의 내용을 인용하겠습니다.

본문과 코드를 살펴보자.

Read about function literals with receiver .

You can declare isEven and isOdd as values, that can be called as extension functions. Complete the declarations below.

Function_literals_with_reciever
fun task(): List<Boolean> {
    val isEven: Int.() -> Boolean = { TODO() }
    val isOdd: Int.() -> Boolean = { TODO() }

    return listOf(42.isOdd(), 239.isOdd(), 294823098.isEven())
}

리시버에서 알 수 있듯이 변수 isEvenisOdd는 Int 유형의 인스턴스에서 참조된다는 것을 알 수 있습니다.
(실제로, 다음의 코드에서는 42/239/294823098 라고 하는 Int형의 인스턴스가 호출하고 있는군요.)

isEven은 호출 원래 인스턴스가 짝수이면 true를 반환하고 isOdd는 호출자 인스턴스가 홀수이면 true를 반환하도록 구현합니다.

따라서 다음과 같은 구현이 됩니다.

Function_literals_with_receiver
fun task(): List<Boolean> {
    val isEven: Int.() -> Boolean = { this % 2 == 0 }
    val isOdd: Int.() -> Boolean = { this % 2 != 0 }

    return listOf(42.isOdd(), 239.isOdd(), 294823098.isEven())
}

(this % 2 != 0this % 2 == 1에서도 괜찮습니다.)

4 마지막으로



다음은 Kotlin Koans Builders/String and map builders의 해설을 하겠습니다

좋은 웹페이지 즐겨찾기