概要
原著者の許諾を得て翻訳・公開いたします。
- 英語記事: Clamp for min/max values - Andy Croll
- 原文公開日: 2019/08/11
- 著者: Andy Croll
日本語タイトルは内容に即したものにしました
Ruby 2.4〜の#clampで最大・最小値をまとめて制約(翻訳)
以前私が書いたValue Object記事のinitializeメソッドでは、整数に最大値や最小値の制約をかける例を扱いました。Ruby 2.4から、こういうときに便利な#clampメソッドが導入されました。ドキュメントによるとComparableモジュールにあります。
以下のように書くよりも
Array#minやArray#maxで値の範囲に制約をかける。
value = 1000
[[0, value].max], 255].min
#=> 255
value = -100
[[0, value].max], 255].min
#=> 0
以下のように書こう
Rubyの#clampメソッドを使う。
value = 1000
value.clamp(0, 255)
#=> 255
value = -100
value.clamp(0, 255)
#=> 0
そう書く理由
Comparableモジュールは応用範囲の広いエレガントな標準ライブラリです。
私が解決しようとしてた問題にどんぴしゃりはまった以上、これより冗長な書き方をする必要があるでしょうか?
そう書かない理由があるとすれば
#clampメソッドを使わない理由はありません。[ ]をネストした従来の紛らわしい書き方がお好きなら別ですが。
謝意
Ruby 2.4より前の私のコードについて指摘いただいたJustinに感謝します。