#37 Kotlin Koans Builders/String and map builders 해설

1 소개



Kotlin 공식 레퍼런스의 Kotlin Koans Builders/String and map builders의 해설 기사입니다.

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

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

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

2 StringBuilder를 사용하여 문자열 연결



Kotlin의 문자열 연결 방법 중 하나는 StringBuilder 인스턴스를 사용하는 것입니다.

다음의 순서로 이용합니다.

  • StringBuilder 인스턴스를 생성한다.
  • StringBuilder 인스턴스가 append()를 호출하여 인수로 연결하려는 문자열을 전달합니다.
  • StringBuilder 인스턴스가 toString()을 호출하여 반환 값으로 연결된 문자열을 반환합니다.

  • 예를 보자.

    Stringbuilder_Example
    fun main(){
      val sb = StringBuilder()
      sb.append("G")
      sb.append("o")
      sb.append("o")
      sb.append("d")
      println(sb.toString())
    }
    

    위 예제의 실행 결과는 Good입니다.

    3 Builders/String and map builders 설명



    Kotlin Koans Builders/String and map builders의 해설입니다.
    수시로 본 사이트의 내용을 인용하겠습니다.

    본문과 코드를 살펴보자.

    Extension function literals are very useful for creating builders, e.g.:

    Example
    fun buildString(build: StringBuilder.() -> Unit): String {
        val stringBuilder = StringBuilder()
        stringBuilder.build()
        return stringBuilder.toString()
    }
    
    val s = buildString {
        this.append("Numbers: ")
        for (i in 1..3) {
            // 'this' can be omitted
            append(i)
        }
    }
    
    s == "Numbers: 123"
    

    Add and implement the function 'buildMutableMap' with one parameter (of type extension function) creating a new HashMap, building it and returning it as a result. The usage of this function is shown below.

    String_and_map_builders
    import java.util.HashMap
    
    /* TODO */
    
    fun usage(): Map<Int, String> {
        return buildMutableMap {
            put(0, "0")
            for (i in 1..10) {
                put(i, "$i")
            }
        }
    }
    

    usage() 를 호출하면 Int 형의 key/String 형의 value 가 포함된 Map 가 돌려주어집니다.
    이 Map을 생성하기 위해 builderMutableMap()을 사용하기 때문에 이 함수를 적절하게 구현합니다.

    buildMutableMap()에는 put()이라는 함수를 건네주어(받는 인수명을 build로 합니다.), Int형의 key/String형의 value가 격납된 HashMap를 돌려줄 필요가 있으므로 이하와 같은 구현이 됩니다 합니다.

    String_and_map_builders
    fun <Int, String> buildMutableMap(build: HashMap<Int, String>.() -> Unit): Map<Int,String>
    
    HashMap< Int, String> 라고 하는 구현이 되고 있는 것은, put()를 호출하는 것이 HashMap 인스턴스이기 때문이군요.

    또, buildMutableMap()의 반환값이 Map형이 되고 있습니다만, 물론 HashMap형에서도 OK입니다.

    그런 다음 build()를 호출하기 위한 HashMap 인스턴스를 생성합니다.
    생성한 HashMap 인스턴스가 build()를 호출하고 반환값으로 반환하면 OK입니다.

    따라서 최종 구현은 다음과 같습니다.

    String_and_map_builders
    import java.util.HashMap
    
    fun <Int, String> buildMutableMap(build: HashMap<Int, String>.() -> Unit): Map<Int, String> {
        val map = HashMap<Int, String>()
        map.build()
        return map
    }
    
    fun usage(): Map<Int, String> {
        return buildMutableMap {
            put(0, "0")
            for (i in 1..10) {
                put(i, "$i")
            }
        }
    }
    

    4 마지막으로



    다음은 Kotlin Koans Builders/The function apply의 해설을 하겠습니다

    좋은 웹페이지 즐겨찾기