Exceptions and Defensive Coding
Guard Clauses
Return early when input is too small to use.
guard-clause
A guard clause handles an invalid or special case before the main work.
Guard Clauses
GuardClauses.kt
Replay: real traced execution (multi-file project)
fun displayName(name: String): String {
if (name.isBlank()) {
return "missing"
}
if (name.length < 3) {
return "short:$name"
}
return "name:$name"
}
fun main() {
val name = "Mira"
val label = displayName(name)
println("name=${name.ifBlank { "blank" }}")
println("label=$label")
}
fun displayName(name: String): String {
if (name.isBlank()) {
return "missing"
}
if (name.length < 3) {
return "short:$name"
}
return "name:$name"
}
fun main() {
val name = ""
val label = displayName(name)
println("name=${name.ifBlank { "blank" }}")
println("label=$label")
}
fun displayName(name: String): String {
if (name.isBlank()) {
return "missing"
}
if (name.length < 3) {
return "short:$name"
}
return "name:$name"
}
fun main() {
val name = "Jo"
val label = displayName(name)
println("name=${name.ifBlank { "blank" }}")
println("label=$label")
}
name ← Mira
11fun main() {12 val name→ Mira = "Mira" //@name="", "Jo"13 val label = displayName(nameMira)fun displayName(name: String): String
1fun displayName(nameMira: String): String {2 if (name.isBlank()) {3 return "missing"4 }5 if (name.length < 3) {6 return "short:$name"7 }8 return "name:$nameMira"9}label ← name:Mira
12 val name = "Mira" //@name="", "Jo"13 val label→ name:Mira = displayName(nameMira)1415 println("name=${nameMira.ifBlank { "blank" }}")16 println("label=$labelname:Mira")17}outputname=Mira label=name:Mira
name ← (empty)
11fun main() {12 val name→ (empty) = ""13 val label = displayName(name(empty))fun displayName(name: String): String
1fun displayName(name(empty): String): String {2 if (name.isBlank()) {if (name.isBlank())
1fun displayName(name: String): String {2 if (name(empty).isBlank()) {3 return "missing"4 }label ← missing
12 val name = ""13 val label→ missing = displayName(name(empty))1415 println("name=${name(empty).ifBlank { "blank" }}")16 println("label=$labelmissing")17}outputname=blank label=missing
name ← Jo
11fun main() {12 val name→ Jo = "Jo"13 val label = displayName(nameJo)fun displayName(name: String): String
1fun displayName(nameJo: String): String {2 if (name.isBlank()) {if (name.length < 3)
4}5if (name.length2 < 3) {6 return "short:$nameJo"7}label ← short:Jo
12 val name = "Jo"13 val label→ short:Jo = displayName(nameJo)1415 println("name=${nameJo.ifBlank { "blank" }}")16 println("label=$labelshort:Jo")17}outputname=Jo label=short:Jo