Clamp and label invalid numbers before using them.

Guard Clauses

GuardClauses.scala
object Main {
  def main(args: Array[String]): Unit = {
    val input = 
    var safe = input
    var note = "ok"
    if (input < 0) {
      safe = 0
      note = "negative"
    }
    if (input == 0) {
      note = "zero"
    }
    val ready = safe > 0

    println("input=" + input)
    println("note=" + note)
    println("ready=" + ready)
  }
}
object Main {
  def main(args: Array[String]): Unit = {
    val input = 
    var safe = input
    var note = "ok"
    if (input < 0) {
      safe = 0
      note = "negative"
    }
    if (input == 0) {
      note = "zero"
    }
    val ready = safe > 0

    println("input=" + input)
    println("note=" + note)
    println("ready=" + ready)
  }
}
object Main {
  def main(args: Array[String]): Unit = {
    val input = 
    var safe = input
    var note = "ok"
    if (input < 0) {
      safe = 0
      note = "negative"
    }
    if (input == 0) {
      note = "zero"
    }
    val ready = safe > 0

    println("input=" + input)
    println("note=" + note)
    println("ready=" + ready)
  }
}
guard-clauses A guard clause checks input early and replaces a bad value with a safe one. The note records what happened so later steps stay deterministic.