10月も半分がすぎて、最近は急に冷えてきました。。今年も残り72日だそうで、あっという間。
最近は外を歩くとき、金木犀の匂いで癒されてます。秋、感じてます🍂
秋とは全く関係ないけど、今日は範囲オブジェクトを紹介します。
範囲オブジェクトとは指定した最初の値と最後の値の範囲を表すオブジェクト。
範囲オブジェクトの用途
- 繰り返し処理と一緒に使用して順に値を取得
- ある値が範囲内に含まれているかどうかを調べる
- 数値の範囲・文字の範囲・日付の範囲などを指定できる
範囲オブジェクトは、「..」演算子や「…」演算子で作成できます。
「..」演算子 | first..last |
「…」演算子 | first…last |
‘first’の部分には、範囲の始端となる値を指定します。
‘last’の部分には、範囲の終端となる値を指定します。
「..」演算子の場合は範囲の終端の値まで含まれますが、「…」演算子の場合は範囲の終端の部分は含まれません。
プログラミング(例) | 結果 |
(1..5).each{ |i| p i} | 1 2 3 4 5 |
(1…5).each{ |i| p i} | 1 2 3 4 |
他にも、Rangeクラスのクラスメソッドである「new」メソッドでも作成できます。
Rangeクラスの「new」メソッド | Range.new(first, last, [exclude_end]) |
‘exclude_end’の部分には、’true’か’false’を指定します。
‘exclude_end’で、終端の値を要素として含めるかどうかを指定します!
‘exclude_end’が’true’の場合は、終端の値を含めません。(ややこしい)
‘exclude_end’が省略された場合は、終端の値を含めます。(ややこしい)
プログラミング(例) | 結果 |
range1 = Range.new(1, 5, true) p range1 |
1…5 |
range2 = Range.new(1, 5, false) p range2 |
1..5 |
ちなみに、値が含まれているかを確認するには、’include?’メソッドや’cover?’メソッド、’===’が使えます!
始端〜終端の間に値が含まれている場合は’true’を返し、値が含まれていない場合は’false’を返します。
プログラミング(例) | 結果 |
p (1..5).cover?(5) | true |
p (1…5).cover?(5) | false |
p (1..5).include?(5) | true |
p (1…5).include?(5) | false |
p (1..5) === 5 | true |
p (1…5) === 5 | false |
終端を含める場合は「..」演算子。終端を含まない場合は「…」演算子。
ややこしい。冷静に考えるとわかるけど、ぱっとすぐに出てこない、そんな範囲オブジェクト。
間違えたら大変なところ。。気をつけなきゃ(自戒)
おつかれさまでした。