#38 Kotlin Koans Builders/The function apply 해설

1 소개



Kotlin 공식 레퍼런스의 Kotlin Koans Builders/The function apply의 해설 기사입니다.

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

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

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

2 Builders/The function apply 해설



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

본문과 코드를 살펴보자.

The previous examples can be rewritten using the library function apply (see examples below). Write your own implementation of this function named 'myApply'.

The_function_apply
fun <T> T.myApply(f: T.() -> Unit): T { TODO() }

fun createString(): String {
    return StringBuilder().myApply {
        append("Numbers: ")
        for (i in 1..10) {
            append(i)
        }
    }.toString()
}

fun createMap(): Map<Int, String> {
    return hashMapOf<Int, String>().myApply {
        put(0, "0")
        for (i in 1..10) {
            put(i, "$i")
        }
    }
}

#37 Kotlin Koans Builders/String and map builders 의 코드로 작성한 hashMap (와 예로 등장한 StringBuiler를 이용한 캐릭터 라인의 연결)를 myApply()라고 하는 함수를 구현하는 것으로 표현합니다.

myApply() 수신기T는 모든 유형을 나타냅니다.

그래서 createString() · createMap() 함수 내에서 StringBuilder 인스턴스와 HashMap 인스턴스가 myApply()를 호출할 수 있네요.

createString()에서는,
StringBuilder 인스턴스가 myApply()에 인수로 append()를 전달하여 문자열을 연결하는 기능을 myApply()에 맡기고 있습니다.

createMap()에서는,
HashMap 인스턴스가 myApply()에 인수로서 put()을 건네주어, Map에 key/value의 페어를 격납하는 기능을 myApply()에 맡기고 있습니다.

즉, myApply()

인수 f 가 받는 append() 와 put() 을 실행해, 그 결과 얻어지는 StringBuilder 인스턴스와 HashMap 인스턴스를 돌려주는 기능을 구현하면 됩니다.

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

The_function_apply
fun <T> T.myApply(f: T.() -> Unit): T { 
    f()
    return this
}

fun createString(): String {
    return StringBuilder().myApply {
        append("Numbers: ")
        for (i in 1..10) {
            append(i)
        }
    }.toString()
}

fun createMap(): Map<Int, String> {
    return hashMapOf<Int, String>().myApply {
        put(0, "0")
        for (i in 1..10) {
            put(i, "$i")
        }
    }
}


이 예제에서는 구현하지 않았지만 관련 사항으로 Scope 함수가 있습니다.

Scope 함수는 Kotlin의 Scope 함수는 무엇입니까?에서 설명합니다.

3 마지막으로



다음에는 Kotlin Koans Builders/Builders how it works의 해설을 하겠습니다

좋은 웹페이지 즐겨찾기