CoffeeScript で clamp関数


enchantJS でゲームを書いていて欲しくなったので作った

コード

class @ElzupUtils
  # 第2, 3引数によって定義される範囲に固定される第1引数の値を計算する
  @clamp = (val, max, min=0, padding=0) ->
    Math.max(Math.min(max - padding, val), min + padding)

使用例

# 10 から 100 の間に
ElzupUtils.clamp(50, 100, 10)
# -> 50
ElzupUtils.clamp(200, 100, 10)
# -> 100
ElzupUtils.clamp(-20, 100, 10)
# -> 10

# 0 から 10 の間に
ElzupUtils.clamp(-20, 10)
# -> 0
ElzupUtils.clamp(20, 10)
# -> 10

# 5 (= 0 + 5) から 95 (= 100 - 5) の間に
ElzupUtils.clamp(0, 100, 0, 5)
# -> 5
ElzupUtils.clamp(100, 100, 0, 5)
# -> 95

作ってみて思ったこと

  • 引数の順番は (val, min, max) のが良いか? (デフォルトが0 の場合が多いためminを後ろにした)
  • val は適切な命名か?
  • デフォルト引数=演算子の両隣にスペースは必要か?(coffeelint にかけて見たらどちらでも通った)