Exceptions and Defensive Coding
Validation Branch
Check a value before using it and return a small success or failure result.
validation-branch
A validation branch handles bad input before it reaches code that could fail.
Validation Branch
ValidationBranch.kt
Replay: real traced execution (multi-file project)
fun main() {
val raw = "42"
val parsed = raw.toIntOrNull()
val result = if (parsed == null) {
"invalid"
} else {
"value:$parsed"
}
println("raw=$raw")
println("result=$result")
}
fun main() {
val raw = "oops"
val parsed = raw.toIntOrNull()
val result = if (parsed == null) {
"invalid"
} else {
"value:$parsed"
}
println("raw=$raw")
println("result=$result")
}
fun main() {
val raw = "7"
val parsed = raw.toIntOrNull()
val result = if (parsed == null) {
"invalid"
} else {
"value:$parsed"
}
println("raw=$raw")
println("result=$result")
}
raw ← 42, parsed ← 42, result ← value:42
1fun main() {2 val raw→ 42 = "42" //@raw="oops", "7"3 val parsed→ 42 = raw42.toIntOrNull()4 val result→ value:42 = if (parsed42 == null) {5 "invalid"6 } else {7 "value:$parsed42"8 }910 println("raw=$raw42")11 println("result=$resultvalue:42")12}outputraw=42 result=value:42
raw ← oops, parsed ← null, result ← invalid
1fun main() {2 val raw→ oops = "oops"3 val parsed→ null = rawoops.toIntOrNull()4 val result→ invalid = if (parsednull == null) {5 "invalid"6 } else {7 "value:$parsednull"8 }910 println("raw=$rawoops")11 println("result=$resultinvalid")12}outputraw=oops result=invalid
raw ← 7, parsed ← 7, result ← value:7
1fun main() {2 val raw→ 7 = "7"3 val parsed→ 7 = raw7.toIntOrNull()4 val result→ value:7 = if (parsed7 == null) {5 "invalid"6 } else {7 "value:$parsed7"8 }910 println("raw=$raw7")11 println("result=$resultvalue:7")12}outputraw=7 result=value:7