Standard Library Utilities
Math Clamp
Use min and max to keep a value inside a range.
clamp
The standard math helpers compose well. `max(raw, lower)` raises a low value, and `min(..., upper)` lowers a high value.
Math Clamp
MathClamp.scala
Replay: real traced execution (multi-file project)
import scala.math.{max, min}
object Main {
def main(args: Array[String]): Unit = {
val raw = 12
val lower = 0
val upper = 10
val clipped = min(max(raw, lower), upper)
val changed = clipped != raw
println("raw=" + raw)
println("clipped=" + clipped)
println("changed=" + changed)
}
}
import scala.math.{max, min}
object Main {
def main(args: Array[String]): Unit = {
val raw = -3
val lower = 0
val upper = 10
val clipped = min(max(raw, lower), upper)
val changed = clipped != raw
println("raw=" + raw)
println("clipped=" + clipped)
println("changed=" + changed)
}
}
import scala.math.{max, min}
object Main {
def main(args: Array[String]): Unit = {
val raw = 7
val lower = 0
val upper = 10
val clipped = min(max(raw, lower), upper)
val changed = clipped != raw
println("raw=" + raw)
println("clipped=" + clipped)
println("changed=" + changed)
}
}
raw ← 12, lower ← 0, upper ← 10, clipped ← 10, changed ← true
3object Main {4 def main(args: Array[String]): Unit = {5 val raw→ 12 = 12 //@raw=-3, 76 val lower→ 0 = 07 val upper→ 10 = 108 val clipped→ 10 = min(max(raw12, lower0), upper10)9 val changed→ true = clipped10 != raw121011 println("raw=" + raw12)12 println("clipped=" + clipped10)13 println("changed=" + changedtrue)14 }15}outputraw=12 clipped=10 changed=true
raw ← -3, lower ← 0, upper ← 10, clipped ← 0, changed ← true
3object Main {4 def main(args: Array[String]): Unit = {5 val raw→ -3 = -36 val lower→ 0 = 07 val upper→ 10 = 108 val clipped→ 0 = min(max(raw-3, lower0), upper10)9 val changed→ true = clipped0 != raw-31011 println("raw=" + raw-3)12 println("clipped=" + clipped0)13 println("changed=" + changedtrue)14 }15}outputraw=-3 clipped=0 changed=true
raw ← 7, lower ← 0, upper ← 10, clipped ← 7, changed ← false
3object Main {4 def main(args: Array[String]): Unit = {5 val raw→ 7 = 76 val lower→ 0 = 07 val upper→ 10 = 108 val clipped→ 7 = min(max(raw7, lower0), upper10)9 val changed→ false = clipped7 != raw71011 println("raw=" + raw7)12 println("clipped=" + clipped7)13 println("changed=" + changedfalse)14 }15}outputraw=7 clipped=7 changed=false