#19 Kotlin Koans Conventions/Invoke 해설

1 소개



Kotlin 공식 레퍼런스의 Kotlin Koans/Invoke의 해설 기사입니다.

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

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

일단 각자 도전하고 나서 볼 수 있다고 생각합니다

2 Invoke 함수



Invoke 함수 은 함수 호출이 일반 호출보다 단순해진다는 특징을 가지며 ()만으로 참조 할 수 있습니다.

즉,

일반 함수 호출이라면 a.invoke()a() 로 호출할 수 있습니다.

다만, 본문 쪽에도 주의 환기가 있습니다만,

너무 많이 사용하면 코드의 가독성이 저하되기 때문에 주의가 필요합니다.

3 Conventions/Invoke 해설



Kotlin Koans Conventions/Invoke 의 해설입니다.
수시로 본 사이트의 내용을 인용하겠습니다.

본문과 코드를 살펴보자.

Objects with invoke() method can be invoked as a function.

You can add invoke extension for any class, but it's better not to overuse it:
fun Int.invoke() { println(this) }

1() //huh?..

Implement the function Invokable. invoke () so it would count a number of invocations.

Invoke
class Invokable {
    var numberOfInvocations: Int = 0
        private set
    operator fun invoke(): Invokable {
        TODO()
    }
}

fun invokeTwice(invokable: Invokable) = invokable()()

invoke() 함수를 구현하여 invoke() 함수가 호출된 횟수를 계산할 수 있습니다.
invoable()()invokable() 에서 한 번 invoke() 함수를 호출하고 반환 값(Invokable 형식의 인스턴스)이 다시 () 에서 invoke() 함수를 호출합니다.

invoke()는 호출될 때마다 호출된 횟수(numberOfInvocations)에 1을 더하고 Invokable 인스턴스를 반환하면 되므로

다음이 해답입니다.

Invoke
class Invokable {
    var numberOfInvocations: Int = 0
        private set
    operator fun invoke(): Invokable {
        numberOfInvocations ++ 
        return this
    }
}

fun invokeTwice(invokable: Invokable) = invokable()()


4 마지막으로



다음은 Kotlin Koans Collections/Introducion의 해설을합니다.

좋은 웹페이지 즐겨찾기