範囲オブジェクト(Range)とは
RubyのRangeオブジェクトとは、その名の通り範囲を表すためのオブジェクトです。
Rangeオブジェクトの値には、
- 数値
- 文字列
- オブジェクト
が使用できます。
使い方としては、以下のように「..」「…」を使います。
範囲開始値..範囲終了値
範囲開始値...範囲終了値
Rangeを使うことで、コードに柔軟性を持たせ、コードのサイズを小さくすることができます。
具体的な使用例
以下はrangeを使用したシンプルなコード例です。
range1 = (1 .. 5).to_a
puts "#{range1}"
range2 = (1 ... 5).to_a
puts "#{range2}"
# 出力結果
# [1, 2, 3, 4, 5]
# [1, 2, 3, 4]
シーケンスとしての範囲オブジェクト
Rubyで範囲を定義し、シーケンスの連続した値を生成します。
range = 1..5
puts range.include?(3)
num = range.max
puts "最大値 = #{num}"
num = range.min
puts "最小値 = #{num}"
range.each do |num|
puts "繰り返し#{num}"
end
# 出力結果
# true
# 最大値 = 5
# 最小値 = 1
# 繰り返し1
# 繰り返し2
# 繰り返し3
# 繰り返し4
# 繰り返し5
条件で使う範囲オブジェクト
ループにおける条件式で使えます。
num = 333
result = case num
when 100..200 then "num = 100 ~ 200"
when 200..300 then "num = 200 ~ 300"
when 300..400 then "num = 300 ~ 400"
when 400..499 then "num = 400 ~ 499"
else "500以上"
end
puts result
# 出力結果
# num = 300 ~ 400
インターバルとしての範囲オブジェクト
与えられた値が区間内に収まっているかどうかをチェックする場合に使用できます。
if (('A'..'Z') === 'T')
puts "TはAからZの中にあります。"
end
if ((1..100) === 33)
puts "33は1から100の間にあります。"
end
# 出力結果
# TはAからZの中にあります。
# 33は1から100の間にあります。
reverseメソッド
puts (5..1).to_a
このように、範囲オブジェクトを逆順で記述しても、何も出力されません。
なので、逆順に表示したい場合はreverseメソッドを使ってあげましょう。
puts (1..5).to_a.reverse
# 出力結果
# 5
# 4
# 3
# 2
# 1