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がリリース

デザインも頼めるシステム開発会社をお探しならBPS株式会社までどうぞ 開発エンジニア積極採用中です! Ruby on Rails の開発なら実績豊富なBPS

この記事の著者

hachi8833

Twitter: @hachi8833、GitHub: @hachi8833 コボラー、ITコンサル、ローカライズ業界、Rails開発を経てTechRachoの編集・記事作成を担当。 これまでにRuby on Rails チュートリアル第2版の監修および半分程度を翻訳、Railsガイドの初期翻訳ではほぼすべてを翻訳。その後も折に触れて更新翻訳中。 かと思うと、正規表現の粋を尽くした日本語エラーチェックサービス enno.jpを運営。 実は最近Go言語が好きで、Goで書かれたRubyライクなGoby言語のメンテナーでもある。 仕事に関係ないすっとこブログ「あけてくれ」は2000年頃から多少の中断をはさんで継続、現在はnote.muに移転。

hachi8833の書いた記事

夏のTechRachoフェア2019

週刊Railsウォッチ

インフラ

ActiveSupport探訪シリーズ