輝昌2017/3/62019/5/22こんにちは!Webコーダー・プログラマーの貝原(@touhicomu)です。今日は、RubyのRangeオブジェクト(範囲オブジェクト)について解説します。日付範囲オブジェクトでinclude?による比較というように、基本的な内容から応用的な使い方に関しても学習していきます。まとめ範囲オブジェクトの指定方法まずは基本的なRangeの使い方について見てきます!Rangeは直訳すると「範囲」という意味ですが、Rangeオブジェクトはその通り範囲を表すためのオブジェクトです。範囲オブジェクトはリテラルで指定します。リテラルとは、Rubyのプログラム中に直接書き込める値のことです。数字の2や文字列”ruby”はリテラルです。いうのも、値として直接解釈されるからです。反対にprintなど直接「値」として解釈されないものはリテラルではないものです。擬似コードで範囲オブジェクトのリテラルを書くと、以下のような形になります。以上のように、範囲の開始値と範囲の終了値を「..」でつないで書くと、範囲オブジェクトのリテラル表現になります。範囲オブジェクトをpメソッドで出力して、Rubyが範囲オブジェクトをどのように取り扱っているか確認してみましょう。range実行結果:1..10以上のように、「1..10」をオブジェクトであるものとRubyが認識し、pメソッドによりオブジェクトをそのまま出力しています。範囲は数字だけではなく文字などでも使うことができます。'a'..'z'実行結果:"a".."z"以上のように、文字の範囲オブジェクトもRubyに正しく認識されています。Rangeクラスで範囲を指定する範囲オブジェクトは前述した「範囲開始値..範囲終了値」によってオブジェクトを作成できますが、Rangeクラスのnewメソッドでも同様に範囲を指定することができます。具体的には以下のように記述します。range2実行結果:1..10"a".."z"このように「範囲開始値..範囲終了値」の場合と同じように範囲オブジェクトを定義できます。範囲オブジェクト(Rangeオブジェクト)はeachによる繰り返しでよく使用されます。eachによる繰り返しを行いたい時は配列を渡していた方も多いと思いますが、範囲オブジェクトを渡すことで少し手間が省けます。iend実行結果:12345以上のように、範囲オブジェクトに直接eachメソッドを使用し、繰り返し処理を行うことができます。範囲オブジェクトに対し、「1...5」と指定することで、最大値(ここでは5)を含まずに繰り返します。iend実行結果:1234以上のように、「1...5」と少し形を変えて範囲オブジェクトを指定することで、最大値を含まない範囲オブジェクトになります。eachメソッドについて詳しくは、以下の記事を参照してください。範囲オブジェクト(Rangeオブジェクト)には、for文による繰り返し処理にも使用できます。for文の処理内容はeachメソッドと全く同じです。for文はeachメソッドで実現されています。このように、for文のような他の言語でよく使う構文をeachと同じように使えるようにすることを、「Rubyのシンタックス・シュガー」と言います。シンタックス・シュガーとは、「(Rubyの)構文を砂糖のように甘くてやさしく、柔軟性のある使い方にすること」という意味です。実際に文字の範囲オブジェクトにfor文を使ってみましょう。ここでは、’a’から’d’までのアルファベットの範囲オブジェクトを使用します。iend実行結果:"a""b""c""d"以上のように、範囲オブジェクトに対してeachメソッドの場合と同じようにfor文が使用できました。for文について詳しくは、以下の記事を参照してください。日付もRangeオブジェクトとして扱うことができます。このおかげで連番の日付を、簡単に生成することができます。ここでは、Dateクラスのparseメソッドを使用して、”2017-03-01”などの文字列からDateクラスのインスタンス(値)を作成しています。日付の範囲オブジェクトに対し、eachメソッドを使用して範囲の分、日を繰り返して、pメソッドによりそれぞれの日を出力しています。((2457818j,0s,0n),+0s,2299161j)>Dateについて詳しくは、以下の記事を参照してください。2019年6月26日Rangeでinclude?による比較Rangeの中に値が含まれているかどうかをinclude?メソッドで確かめることができます。include?メソッドはRangeオブジェクトに共通のメソッドで、数値のRangeオブジェクト、文字のRangeオブジェクト、日付のRangeオブジェクトのどれにも適用できます。数値Rangeオブジェクトまずは、数値のRangeオブジェクトに対して、include?メソッドを使用してみましょう。include?は、第一引数に値を指定すると、その値がRangeオブジェクトに含まれている場合はtrue、含まれてない場合はfalseを返します。8実行結果:truefalse文字Rangeオブジェクト次に、文字のRangeオブジェクトに対してinclude?メソッドを使用してみましょう。構文は数値のRangeオブジェクトのinclude?メソッドと同じ構文です。'z'実行結果:truefalse日付Rangeオブジェクト次に、日付のRangeオブジェクトに対してinclude?メソッドを使用してみましょう。構文は数値のRangeオブジェクトのinclude?メソッドと同じ構文です。Date.parse("2017-04-01")実行結果:truefalse以上のように、日付Rangeオブジェクトに対してもinclude?を使用することができました。このようにRangeオブジェクトなら中身に関係なくinclude?による比較ができていることがわかります。まとめ今回は、RubyのRangeオブジェクト(範囲オブジェクト)について学習しました。範囲を指定できるeach繰り返しでRangeを使うことができるfor繰り返しでRangeを使うことができるinclude?によりRangeオブジェクトの比較ができる以上の内容を再確認し、ぜひ自分のプログラムに生かし学習を進めてください!TweetPocket無料でSEからWebエンジニアへ転職しませんか?侍エンジニア塾では、完全未経験の方から現在SEだけどプログラミングはやっていないという経験者まで、幅広い方々の人生を好転させるプログラミング指導を行ってきました。SEの方とお話していくなかで、システムエンジニアという職業だけどコードが書けない事務作業が多くスキルがないため将来が不安スクールに通うと完全未経験者と同じスタートになるからレベルが合わないという、すでに知識があるSEならではのお悩みがあることに気づきました。弊社では、マンツーマンでレッスンを行いますので、現在お持ちの知識レベルからカリキュラムを作成いたします。こちらの転職コースは無料で受講を始められて転職成功でそのまま卒業できるというとてもお得なコースとなっています。知識のあるSEといっても転職は年齢が若いほど受かりやすいため、まずは無料体験レッスンで今の現状や理想の働き方について一緒に考えていきましょう。輝昌こんにちは!貝原(@touhicomu)と申します。現在は、Web業界のフリーランスとして、主にPHP/WordPress/BuddyPress/VPSサーバー構築などの業務を受注しています。現住所は、日本の西海岸、長崎県は波佐見町です。ボランティアでほたる撮影会やそば塾などのスタッフとして参加させて頂いています。以下の活動も行っています。