以前にsealed class とwhenで条件分岐を行うとラクだよという記事を書きました。sealed interfaceでも同様です。

これに似た作用を得る方法にenum classも使えます。

/**
 * You can edit, run, and share this code.
 * play.kotlinlang.org
 */
enum class Direction {
  NORTH, SOUTH, WEST, EAST
}
fun main() {
    val direction = Direction.SOUTH
    val num = direction.ordinal
    when (direction) {
        Direction.NORTH -> print("north : " + num)
        Direction.SOUTH -> print("south : " + num)
        Direction.WEST -> print("west : " + num)
        Direction.EAST -> print("east : " + num)
        else -> print("other" + num) //'when' is exhaustive so 'else' is redundant here
    }
}

https://pl.kotl.in/qPkIZ9hw0

これを実行するとelseの左側に「’when’ is exhaustive so ‘else’ is redundant here」と表示され、else文には絶対条件分岐しないので、書かなくて良いよと教えてくれます。ドメインモデルを書くときは積極的に使うとコンパイル時に間違いに気付くことができます。enum classの利点なはordinalを自動で付与してくれることなので、大半の場合はsealed classやsealed interfaceを使うことをが多いと思います。