Kotlin の map が恐いので withDefault と map delegate を覚えました

map 恐くないですか?

val map = mapOf("trainId" to "AX768BG")

こんなんあったとして

map["trainId"]

って取りに行ったら、こいつ Nullable じゃないですか、そんな!え?当たり前!?

そんな!

だから最近 getValue を覚えました。

やったぜ

でもこいつ、当たり前ですけど、例外出すじゃないですか……。

こんなことすると
こんなことになる

腹たってちゃんと調べたら、 withDefault とか、 getOrDefault とか、 getOrElse とかそれっぽいのたくさんあるのですね。

val map = mapOf("trainId" to "AX768BG").withDefault { "hazure!" }

こうやってフォールバック先の値を書いておけば、

やったぜ

安心でした。

map delegate

もう一つ先週覚えたのが、 lazy と違ってこれまで使い方のわかってなかった map delegate でした。

結局のところコンパイルタイムというか、 IDE 上で教えてほしいので、

class Transport(val map: Map<String, String>) {
val trainId: String by map
}

こういうクラスを簡単に用意して、

val transport = Transport(map)
println(transport.trainId) // "AX768BG"

とするだけでした。 busId が赤い!さっさと知ってたら良かった!

幸せな map 生活

しかしこういうまめ知識をひたすら蓄積していくと、 Swift なんとかしてくれよってなってくる感じがします……。

A single golf clap? Or a long standing ovation?

By clapping more or less, you can signal to us which stories really stand out.