Data Classes and Sealed Types
Result Modeling
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.