.net column

.NET開発者のためのブログメディア

Rubyの範囲オブジェクトとは?詳しい内容をご紹介!

2020年06月30日

SE
Rubyのコードで日付を指定通りに扱う方法はありますか。

PM
数値や日付を扱うときには、範囲オブジェクトを使ってみましょう。

Rubyの範囲オブジェクトについて

今回は、Rubyの範囲オブジェクト(Rangeオブジェクト)について説明します。Rubyの範囲オブジェクトとは、範囲を表すためのオブジェクトです。

作成方法や扱い方、注意点についてまとめました。Rubyの範囲オブジェクトに興味のある方はぜひご覧ください。

範囲オブジェクトの作成(..)

Rubyの範囲オブジェクトは「first..last」で作成できます。firstは範囲開始値、lastは範囲終了値で、firstからlastまでの値の範囲を表します。また、firstとlastは大小の比較ができるものでなければなりません。そのため、数値・文字・日付の範囲などを扱えます。

実際のソースコードを見てみましょう。

実行結果は以下のようになります。

Rubyに正しく認識されていることが分かります。

また、範囲オブジェクトは「…」でも作成できます。
この場合、lastはオブジェクトに含みません。

実際のソースコードを見てみましょう。

実行結果は以下のようになります。

このように、Rubyの範囲オブジェクトは「..」または「…」で作成できます。

範囲オブジェクトの作成(Range)

Rubyの範囲オブジェクトは、Rangeクラスの「new」メソッドで作成できます。
以下のように記述します。
Range.new(first, last[, exclude_end])

exclude_endは、範囲にlastを含むか否かを指定する引数で、省略できます。
・true : lastを含まない
・false : lastを含む
省略した場合は、falseと同じです。

実際のソースコードを見てみましょう。

実行結果は以下のようになります。

このように、Rubyの範囲オブジェクトはRange.new()でも作成できます。

範囲オブジェクトの繰り返し処理(each)

範囲オブジェクトは、each文で繰り返し処理ができます。

実際のソースコードを見てみましょう。

実行結果は以下のようになります。

このように、each文で繰り返し処理ができます。
また、eachの代わりにreverse_eachを使用すると、逆順に繰り返し処理ができます。

範囲オブジェクトの繰り返し処理(for)

範囲オブジェクトは、for文で繰り返し処理ができます。

実際のソースコードを見てみましょう。

実行結果は以下のようになります。

exclude_endにtrueを指定しているので、lastが含まれていないことが分かります。このように、for文で繰り返し処理ができます。

範囲オブジェクトの要素数

範囲オブジェクトの要素数は、sizeメソッドで取得できます。

実際のソースコードを見てみましょう。

実行結果は以下のようになります。

sizeメソッドはfirst、lastのいずれかのオブジェクトがNumericクラスのオブジェクトではない場合、nilを返します。そのため、range1~range3の要素数のみが出力されます。

範囲オブジェクトの比較(include?)

範囲オブジェクトに要素が含まれているか否か、include?で比較できます。

実際のソースコードを見てみましょう。

実行結果は以下のようになります。

このように、範囲オブジェクトに要素が含まれているか否か、include?で比較できます。

範囲オブジェクトの比較(===)

範囲オブジェクトに要素が含まれているか否か、「===」でも比較できます。

実際のソースコードを見てみましょう。

実行結果は以下のようになります。

このように、範囲オブジェクトに要素が含まれているか否か、「===」でも比較できます。

SE
範囲オブジェクトで指定すれば、日付を数字の順に並べることも可能になるのですね。

PM
範囲オブジェクトの繰り返しを処理など、ソースコードを参考にして活用しましょう。

Rubyの範囲オブジェクトを理解しよう

Rubyの範囲オブジェクト(Rangeオブジェクト)は、範囲を表すためのオブジェクトで、その作成方法や扱い方について説明しましたが、いかがでしたでしょうか。

作成した範囲オブジェクトに対して、繰り返し処理や検索処理ができます。ぜひご自身でソースコードを書いて、Rubyについて理解を深めてください。


.NET分野でのキャリアアップをお考えの方は、現在募集中の求人情報をご覧ください。

求人一覧

また、直接のエントリーも受け付けております。

エントリー(応募フォーム)