Exceptions and Defensive Coding
Result-Like Status
Return a simple status object instead of throwing.
Result-Like Status
ResultLikeStatus.kt
class ParseStatus(val ok: Boolean, val text: String)
fun parseCount(raw: String): ParseStatus {
val number = raw.toIntOrNull()
if (number == null) {
return ParseStatus(false, "not-number")
}
return ParseStatus(true, "count:$number")
}
fun main() {
val raw =
val status = parseCount(raw)
val outcome = if (status.ok) {
"ok"
} else {
"fail"
}
println("raw=$raw")
println("outcome=$outcome")
println("text=${status.text}")
}
class ParseStatus(val ok: Boolean, val text: String)
fun parseCount(raw: String): ParseStatus {
val number = raw.toIntOrNull()
if (number == null) {
return ParseStatus(false, "not-number")
}
return ParseStatus(true, "count:$number")
}
fun main() {
val raw =
val status = parseCount(raw)
val outcome = if (status.ok) {
"ok"
} else {
"fail"
}
println("raw=$raw")
println("outcome=$outcome")
println("text=${status.text}")
}
class ParseStatus(val ok: Boolean, val text: String)
fun parseCount(raw: String): ParseStatus {
val number = raw.toIntOrNull()
if (number == null) {
return ParseStatus(false, "not-number")
}
return ParseStatus(true, "count:$number")
}
fun main() {
val raw =
val status = parseCount(raw)
val outcome = if (status.ok) {
"ok"
} else {
"fail"
}
println("raw=$raw")
println("outcome=$outcome")
println("text=${status.text}")
}
status-result
A small status type can report success or failure without an exception path.