Swift でジェネリック型のクランプをする

クランプ(Clamp)とは、ある値が任意の範囲になるように調整することをいう。

たとえば、値を 0 〜 10 の値にしたければ、以下のようなコードを書く。

if x < 0 {
  x = 0
}

if x > 10 {
  x = 10
}

ただし、必要な箇所でその都度、上のようなコードを書くと煩雑なので、これを関数化すると便利だ。

対象の型を特定しないようにジェネリック(Generic)にして関数化すると下のようになった。

static func clamp<T: Comparable>(_ val: T, min: T, max: T) -> T {
  if val < min {
    return min
  }

  if val > max {
    return max
  }

  return val
}