概要
原著者の許諾を得て翻訳・公開いたします。
- 英語記事: 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に感謝します。