Use when to handle each sealed subclass.

Sealed When

SealedWhen.kt
sealed class Level
class LowLevel : Level()
class HighLevel : Level()

fun describe(level: Level): String {
    return when (level) {
        is LowLevel -> "low"
        is HighLevel -> "high"
    }
}

fun main() {
    val score = 
    val level: Level

    if (score >= 8) {
        level = HighLevel()
    } else {
        level = LowLevel()
    }

    val label = describe(level)

    println("score=$score")
    println("label=$label")
}
sealed class Level
class LowLevel : Level()
class HighLevel : Level()

fun describe(level: Level): String {
    return when (level) {
        is LowLevel -> "low"
        is HighLevel -> "high"
    }
}

fun main() {
    val score = 
    val level: Level

    if (score >= 8) {
        level = HighLevel()
    } else {
        level = LowLevel()
    }

    val label = describe(level)

    println("score=$score")
    println("label=$label")
}
sealed class Level
class LowLevel : Level()
class HighLevel : Level()

fun describe(level: Level): String {
    return when (level) {
        is LowLevel -> "low"
        is HighLevel -> "high"
    }
}

fun main() {
    val score = 
    val level: Level

    if (score >= 8) {
        level = HighLevel()
    } else {
        level = LowLevel()
    }

    val label = describe(level)

    println("score=$score")
    println("label=$label")
}
sealed-when `when` pairs naturally with sealed classes because every subclass can be listed.