Techioz Blog

数値を上限/下限に制限しますか?

概要

Ruby または Rails で数値 num の上限/下限を制限する組み込みの方法またはよりエレガントな方法はありますか?

例えば何かのようなもの:

def number_bounded (num, lower_bound, upper_bound)
  return lower_bound if num < lower_bound
  return upper_bound if num > upper_bound
  num
end

解決策

これを行うための賢い方法は次のとおりです。

[lower_bound, num, upper_bound].sort[1]

しかし、それはあまり読みやすいものではありません。 1 回だけ行う必要がある場合は、そうします

num < lower_bound ? lower_bound : (num > upper_bound ? upper_bound : num)

または、複数回必要な場合は、Comparable モジュールにモンキーパッチを適用します。

module Comparable
  def bound(range)
     return range.first if self < range.first
     return range.last if self > range.last
     self
  end
end

したがって、次のように使用できます

num.bound(lower_bound..upper_bound)

また、単に Ruby ファセットを要求することもできます。これにより、これを実行するメソッド クリップが追加されます。