Tech Racho エンジニアの「?」を「!」に。
  • 開発

Ruby 2.4〜の`#clamp`で最大・最小値をまとめて制約(翻訳)

概要

原著者の許諾を得て翻訳・公開いたします。

日本語タイトルは内容に即したものにしました

Ruby 2.4〜の#clampで最大・最小値をまとめて制約(翻訳)

以前私が書いたValue Object記事initializeメソッドでは、整数に最大値や最小値の制約をかける例を扱いました。Ruby 2.4から、こういうときに便利な#clampメソッドが導入されました。ドキュメントによるとComparableモジュールにあります。

以下のように書くよりも

Array#minArray#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に感謝します。

関連記事

Ruby 2.7.0-preview2がリリース


CONTACT

TechRachoでは、パートナーシップをご検討いただける方からの
ご連絡をお待ちしております。ぜひお気軽にご意見・ご相談ください。