ラッパーというよりむしろルー大柴みたいなタイトルになってしまいましたが、enum便利ですよね。
今日はKotlinのwhen
句の引数にenumを入れる時の心がけについてです。
といっても、言いたいことは超シンプル。
「else
を使うな」
これだけです。
サンプルで説明します。
enum class Hoge {
FOO,
BAR,
BAZ,
}
fun extractMessage(hoge: Hoge): String {
return when(hoge) {
Hoge.FOO -> "FOO!"
Hoge.BAR -> "BAR!!"
else -> "Something else"
}
}
割とやりがちですよね。
もちろん、普通に動きます。
ですが、ここで else
を使ってしまうと、せっかくのenumのメリットが半減してしまいます。
どういう時に困るのか。
それはenumの種類が増えた時です。
enum class Hoge {
FOO,
BAR,
BAZ,
QUX, // 新しく増えた
}
else
を使ってると、enumに新しい値が増えたとしてもなにも言ってもらえません。
fun sample(hoge: Hoge): String {
return when(hoge) {
Hoge.FOO -> "FOO!"
Hoge.BAR -> "BAR!!"
else -> "Something else"
// 普通にコンパイル通る
}
}
仮に、「QUXの時は"QUX!!!"と出したい」という要件だったとしましょう。
でも、コンパイルエラーが出ないので、割と普通に修正漏れが発生してバグの温床になります。
一方else
を使わずにすべてのケースを網羅する形で書いていたら、新しいenumが増えた時にちゃんとコンパイラがエラーを出してくれます。
fun sample(hoge: Hoge): String {
return when(hoge) {
Hoge.FOO -> "FOO!"
Hoge.BAR -> "BAR!!"
Hoge.BAZ -> "Something else"
// コンパイルエラー
}
}
これによって、「あ、ここも修正するんだった」ということに事前に気づけて、大変にハッピーです。
ということで、復唱します。
「Hey you, Kotlinでenumをwhenする時にelse使うなyo!」