Ruby eachメソッドを初心者でも使える!知っていると便利な知識やfor文との違いも

Ruby eachメソッドを初心者でも使える!知っていると便利な知識やfor文との違いも

プログラミング言語Rubyのeachメソッドを、Ruby初心者向けに解説します。

Rubyのeachメソッドは、for式(for文)と似ており、繰り返し処理を行うメソッドです。

※プログラミング言語Rubyでは、あまりfor式は使われません。for式に関する詳しい説明は、for式について解説した記事をご覧ください。

本記事では、Ruby eachメソッドの基本的な使い方から、知っておくと便利な知識まで丁寧に解説します。

本記事を読み終える頃には、Ruby eachメソッドの基本が理解できているでしょう。ぜひ最後まで読んで、Ruby eachメソッドを理解してください。

Ruby eachメソッドとは?どんな書き方?

まずは、Ruby eachメソッドをどのような時に使用するか解説します。

eachメソッドは、非常に簡単に言うと、繰り返し処理を行いたい時に使用します。

Rubyの中では、繰り返し処理を行う対象は、以下の3つになります。

  • 配列の要素

配列は、同じ種類の要素が複数含まれるデータの事です。例えば、「名前」という配列に、「前田」「佐藤」「鈴木」という要素を持たせることが可能です。

※配列があまり理解できていない人は、配列について詳しく解説した記事をご覧ください。

  • 範囲オブジェクト

範囲オブジェクトとは、範囲の開始位置と、終了位置で定義できるオブジェクト(操作対象)の事です。例えば、110の数値や、azのような文字が範囲オブジェクトです。

  • ハッシュの要素

ハッシュは「キー」と「値」を要素の組み合わせとして持ったオブジェクトです。配列の場合要素を指定する場合は、配列のインデックス番号を使いますが、ハッシュでは「キー」を指定することで、「値」が取得できます。「キー」と「値」を複数の組み合わせで持つことが多いので、その要素に対して繰り返し処理を行います。

Ruby eachメソッドの基本的な書き方・具体例

eachメソッドの基本的な書き方は以下のようになります。

では、eachメソッドを3つのやり対象に対して、具体例をあげて紹介します。下記のソースコードをご覧ください。

eachメソッドの具体例(配列の要素)】

【出力結果】

まず、ソースコードの1行目でfruitsという配列オブジェクトを用意しています。

そして、配列オブジェクトfruitsの要素(メロン・ブドウ・リンゴ)を順番に変数fruitに代入し、putsで出力しています。

配列の名前はfruitsで複数形、eachメソッド内での変数はfruitで単数形になっていることに注意してください。

また、eachメソッド内で使用したfruitという変数は「ブロックパラメータ」と呼ばれているので、ぜひ覚えておきましょう。

 eachメソッドの具体例(範囲オブジェクト)】

【出力結果】

rangeオブジェクトに、15まで(1, 2, 3, 4, 5)の要素を、「1..5」の記述で設定しています。範囲オブジェクトは、「範囲開始..範囲終了」の記述方法で指定することが可能です。ちなみに、「..」を「」にすることで、範囲終了の値は含まない指定となります。

その後、rangeオブジェクトに、eachメソッドを実行し、rangeの要素を、putsで出力しています。

eachメソッドの具体例(ハッシュの要素)】

【出力結果】

ハッシュの要素として、pointに、「国語:60」、「数学:80」、「英語:70」をキーと値の組み合わせとして定義します。

eachメソッドでは、ブロックパラメータを |「キー」, 「値」| のように設定するのが注意点です。

 

\文字より動画で学びたいあなたへ/

Udemyで講座を探す >

Ruby eachと併せて知っておきたいeach_with_indexメソッド

繰り返し処理には、eachメソッドを使うと便利であることは、これまでにお伝えしてきました。しかし、eachメソッドでは、配列などの要素は扱えますが、「何番目の要素」に対する処理なのかがわかりません。配列の要素とともに要素の番号(添字)も扱いたいときは、each_with_indexメソッドを使うと便利です。

Ruby eachメソッドの基本的な書き方・具体例」で挙げた、配列の例をeach_with_indexメソッドに変更してみましょう。

【出力結果】

配列の要素が、ブロックパラメータの fruitに入り、要素番号はiに入ります。

また、i0から始まるため、putsには、{i+1}することで、1番目からの出力となるようにしています。

each_with_indexについて解説した記事も合わせて読むと、Ruby eachメソッドについての理解がさらに深まるので、ぜひご覧ください。

for文との違いは?

for文も繰り返し処理の際に使用しますが、each文の違いは、変数のスコープ(変数の有効範囲)です。

サンプルコードを使い、実行結果とともに具体例を見た方が理解しやすいため、先にサンプルコードを紹介します。

for文の場合】

【出力結果】

each文の場合】

【出力結果】

for文の場合、2行目に使用されたi6行でも使用可能であるため、その時のiの値が出力されます。一方、each文の場合、2行目で使用されたieach文の中でした使用できないため、6行目のiは変数が宣言されていないというエラーが出力されます。

この使用できる範囲がfor文とeach文の違いです。

理解を深めたい方は、for文について解説した記事も合わせてご覧ください。

 

Ruby eachメソッドを範囲で使ってみよう

Ruby eachメソッドは、「範囲」でも使用することができます。

範囲は、配列やハッシュ(連想配列)と同じく、集まりを表すオブジェクトです。したがって、範囲でもeachメソッドが使用できます。

範囲は、最初の要素と最後の要素を..(ピリオド2個)で繋げて表現します。

【範囲の例】

これで、rangeという変数に1~20までの数字が順番に代入されました。

では、範囲でeachメソッドを使ってみます。下のソースコードをご覧ください。

【範囲でeachメソッドを使う例】

【出力結果】

変数(ブロックパラメータ)であるnumberに1~3までの数字が順番に代入されてputsされました。

Ruby eachメソッドを範囲で使う解説は以上です。

 

Ruby eachメソッドをハッシュで使ってみよう

最後に、Ruby eachメソッドをハッシュ(連想配列)で使う方法を紹介します。

※ハッシュ(連想配列)があまり理解できていない人は、配列について解説した記事の「5:ハッシュ(連想配列)について」をご覧ください。

ハッシュ(連想配列)のキーと値を順番に取り出す時にも、eachメソッドが使えます。

変数(ブロックパラメータ)を2つ用意することで、キーと値を順番に取り出せます。

では、ソースコードの例をご覧ください。

【ハッシュ(連想配列)でeachメソッドを使う例】

【出力結果】

※#{}は変数展開といいます。#{}の中に式や変数を入れると、その式や変数が文字列の中に展開されます。

【変数展開の例】

【出力結果】

今回はkey、valueという2つの変数(ブロックパラメータ)を用意しました。

keyという変数には配列itemsのキー(鉛筆・消しゴム・ノート)が順番に代入されます。

valueという変数には、配列itemsの値(100・50・200)が順番に代入されます。

Ruby eachメソッドをハッシュ(連想配列)で使う解説は以上です。

 

いかがでしたか?Ruby eachメソッドの基本が理解できましたか?

プログラミング言語Rubyを学習した後は、Ruby on Railsというフレームワークを使ったWEBアプリケーションの開発にチャレンジしてみてください!

Ruby on Railsでも、今回学習したeachメソッドは大変よく使うので、eachメソッドは必ず理解しておきましょう。