LoginSignup
0
0

More than 1 year has passed since last update.

Range オブジェクトに minmax を使って多重代入

Last updated at Posted at 2022-07-28

例えば、2022年現在のお盆の期間を Range オブジェクトで保持しているようなケースを考える。

require 'date'

# 2022年のお盆の期間
THIS_YEAR_OBON_RANGE = (Date.parse('2022-08-13')..Date.parse('2022-08-16'))

これを元に、お盆の開始日と終了日をそれぞれ変数に格納しようと思った場合、素直に書くとこうなる。

from = THIS_YEAR_OBON_RANGE.first
to = THIS_YEAR_OBON_RANGE.last

これを1行で書きたいとき、minmax を使うと多重代入で済むので便利だと気づいた。

from, to = THIS_YEAR_OBON_RANGE.minmax

若干トリッキーではあるので、他に良い書き方があれば知りたい。

なお、この書き換えが通用するのは min で始端、max で終端が取得できる場合のみであって、一般には等価な書き換えではないことに注意。以下のようなケースでは結果が違ってきたりエラーが発生したりする:

  • Range オブジェクトが終端を含まない範囲である場合( (10...20) など)
  • 始端や終端を持たない場合( (10..nil)(nil..20) など)
  • 始端より終端が大きい場合 ((20..10) など)
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0