はじめに
公式の問題集「Kotlin Koans」を解きながらKotlinを学習します。
過去記事はこちら
- Introduction
- Classes
- Conventions
- Collections
- Properties
- Builders
問題
レシーバを持つ関数リテラルは、ビルダーの作成などに非常に便利です。例えば:
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"
拡張関数型の)パラメータを受け取り、新しいHashMap
を作成し、それを構築、結果としてそれを返す関数buildMutableMap
を実装します。なお、1.3.70以降では、標準ライブラリに同様のbuildMap関数があります。
修正前コード.kt
import java.util.HashMap
/* TODO */
fun usage(): Map<Int, String> {
return buildMutableMap {
put(0, "0")
for (i in 1..10) {
put(i, "$i")
}
}
}
問題のポイント
解答例
import java.util.HashMap
fun <K, V> buildMutableMap(build: HashMap<K, V>.() -> Unit): Map<K, V> {
val map = HashMap<K, V>()
map.build()
return map
}
fun usage(): Map<Int, String> {
return buildMutableMap {
put(0, "0")
for (i in 1..10) {
put(i, "$i")
}
}
}