Model success and rejection with sealed subclasses.

Result Modeling

ResultModeling.kt
sealed class CheckResult
data class Accepted(val points: Int) : CheckResult()
data class Rejected(val reason: String) : CheckResult()

fun check(points: Int): CheckResult {
    if (points >= 5) {
        return Accepted(points)
    }
    return Rejected("too low")
}

fun describe(result: CheckResult): String {
    if (result is Accepted) {
        return "accepted:${result.points}"
    }
    if (result is Rejected) {
        return "rejected:${result.reason}"
    }
    return "unknown"
}

fun main() {
    val points = 
    val result = check(points)
    val label = describe(result)

    println("points=$points")
    println("label=$label")
}
sealed class CheckResult
data class Accepted(val points: Int) : CheckResult()
data class Rejected(val reason: String) : CheckResult()

fun check(points: Int): CheckResult {
    if (points >= 5) {
        return Accepted(points)
    }
    return Rejected("too low")
}

fun describe(result: CheckResult): String {
    if (result is Accepted) {
        return "accepted:${result.points}"
    }
    if (result is Rejected) {
        return "rejected:${result.reason}"
    }
    return "unknown"
}

fun main() {
    val points = 
    val result = check(points)
    val label = describe(result)

    println("points=$points")
    println("label=$label")
}
sealed class CheckResult
data class Accepted(val points: Int) : CheckResult()
data class Rejected(val reason: String) : CheckResult()

fun check(points: Int): CheckResult {
    if (points >= 5) {
        return Accepted(points)
    }
    return Rejected("too low")
}

fun describe(result: CheckResult): String {
    if (result is Accepted) {
        return "accepted:${result.points}"
    }
    if (result is Rejected) {
        return "rejected:${result.reason}"
    }
    return "unknown"
}

fun main() {
    val points = 
    val result = check(points)
    val label = describe(result)

    println("points=$points")
    println("label=$label")
}
result-model Sealed classes are useful when a function has a small set of possible result shapes.