プログラミング言語Rubyのeachメソッドを、Ruby初心者向けに解説します。
Rubyのeachメソッドは、for式(for文)と似ており、繰り返し処理を行うメソッドです。
※プログラミング言語Rubyでは、あまりfor式は使われません。for式に関する詳しい説明は、for式について解説した記事をご覧ください。
本記事では、Ruby eachメソッドの基本的な使い方から、知っておくと便利な知識まで丁寧に解説します。
本記事を読み終える頃には、Ruby eachメソッドの基本が理解できているでしょう。ぜひ最後まで読んで、Ruby eachメソッドを理解してください。
公開日:2021年3月25日
INDEX
Ruby eachメソッドとは?どんな書き方?
まずは、Ruby eachメソッドをどのような時に使用するか解説します。
eachメソッドは、非常に簡単に言うと、繰り返し処理を行いたい時に使用します。
Rubyの中では、繰り返し処理を行う対象は、以下の3つになります。
- 配列の要素
配列は、同じ種類の要素が複数含まれるデータの事です。例えば、「名前」という配列に、「前田」「佐藤」「鈴木」という要素を持たせることが可能です。
※配列があまり理解できていない人は、配列について詳しく解説した記事をご覧ください。
- 範囲オブジェクト
範囲オブジェクトとは、範囲の開始位置と、終了位置で定義できるオブジェクト(操作対象)の事です。例えば、1~10の数値や、a~zのような文字が範囲オブジェクトです。
- ハッシュの要素
ハッシュは「キー」と「値」を要素の組み合わせとして持ったオブジェクトです。配列の場合要素を指定する場合は、配列のインデックス番号を使いますが、ハッシュでは「キー」を指定することで、「値」が取得できます。「キー」と「値」を複数の組み合わせで持つことが多いので、その要素に対して繰り返し処理を行います。
Ruby eachメソッドの基本的な書き方・具体例
eachメソッドの基本的な書き方は以下のようになります。
1 2 3 |
配列オブジェクト.each do |変数| #処理 end |
では、eachメソッドを3つのやり対象に対して、具体例をあげて紹介します。下記のソースコードをご覧ください。
【eachメソッドの具体例(配列の要素)】
1 2 3 4 |
fruits = ["メロン", "ブドウ", "リンゴ"] fruits.each do |fruit| puts fruit end |
【出力結果】
1 2 3 |
メロン ブドウ リンゴ |
まず、ソースコードの1行目でfruitsという配列オブジェクトを用意しています。
そして、配列オブジェクトfruitsの要素(メロン・ブドウ・リンゴ)を順番に変数fruitに代入し、putsで出力しています。
配列の名前はfruitsで複数形、eachメソッド内での変数はfruitで単数形になっていることに注意してください。
また、eachメソッド内で使用したfruitという変数は「ブロックパラメータ」と呼ばれているので、ぜひ覚えておきましょう。
【eachメソッドの具体例(範囲オブジェクト)】
1 2 3 4 |
range = 1..5 range.each do |i| puts i end |
【出力結果】
1 2 3 4 5 |
1 2 3 4 5 |
rangeオブジェクトに、1~5まで(1, 2, 3, 4, 5)の要素を、「1..5」の記述で設定しています。範囲オブジェクトは、「範囲開始..範囲終了」の記述方法で指定することが可能です。ちなみに、「..」を「…」にすることで、範囲終了の値は含まない指定となります。
その後、rangeオブジェクトに、eachメソッドを実行し、rangeの要素を、putsで出力しています。
【eachメソッドの具体例(ハッシュの要素)】
1 2 3 4 |
point = { "国語" => 60, "数学" => 80, "英語" => 70 } point.each do |key, value| puts "#{key} => #{value}" end |
【出力結果】
1 2 3 |
国語 => 60 数学 => 80 英語 => 70 |
ハッシュの要素として、pointに、「国語:60」、「数学:80」、「英語:70」をキーと値の組み合わせとして定義します。
eachメソッドでは、ブロックパラメータを |「キー」, 「値」| のように設定するのが注意点です。
\文字より動画で学びたいあなたへ/
Udemyで講座を探す >Ruby eachと併せて知っておきたいeach_with_indexメソッド
繰り返し処理には、eachメソッドを使うと便利であることは、これまでにお伝えしてきました。しかし、eachメソッドでは、配列などの要素は扱えますが、「何番目の要素」に対する処理なのかがわかりません。配列の要素とともに要素の番号(添字)も扱いたいときは、each_with_indexメソッドを使うと便利です。
「Ruby eachメソッドの基本的な書き方・具体例」で挙げた、配列の例をeach_with_indexメソッドに変更してみましょう。
1 2 3 4 |
fruits = ["メロン", "ブドウ", "リンゴ"] fruits.each_with_index do |fruit, i| puts "#{i+1}番目のフルーツは#{fruit}です" end |
【出力結果】
1 2 3 |
1番目のフルーツはメロンです 2番目のフルーツはブドウです 3番目のフルーツはリンゴです |
配列の要素が、ブロックパラメータの fruitに入り、要素番号はiに入ります。
また、iは0から始まるため、putsには、{i+1}することで、1番目からの出力となるようにしています。
each_with_indexについて解説した記事も合わせて読むと、Ruby eachメソッドについての理解がさらに深まるので、ぜひご覧ください。
for文との違いは?
for文も繰り返し処理の際に使用しますが、each文の違いは、変数のスコープ(変数の有効範囲)です。
サンプルコードを使い、実行結果とともに具体例を見た方が理解しやすいため、先にサンプルコードを紹介します。
【for文の場合】
1 2 3 4 5 6 |
range = 1..3 for i in range puts i end puts "for文の後のi" puts i |
【出力結果】
1 2 3 4 5 |
1 2 3 for文の後のi 3 |
【each文の場合】
1 2 3 4 5 6 |
range = 1..3 range.each do |i| puts i end puts "each文の後のi" puts i |
【出力結果】
1 2 3 4 5 6 |
1 2 3 each文の後のi Traceback (most recent call last): test.rb:6:in `<main>': undefined local variable or method `i' for main:Object (NameError) |
for文の場合、2行目に使用されたiが6行でも使用可能であるため、その時のiの値が出力されます。一方、each文の場合、2行目で使用されたiはeach文の中でした使用できないため、6行目のiは変数が宣言されていないというエラーが出力されます。
この使用できる範囲がfor文とeach文の違いです。
理解を深めたい方は、for文について解説した記事も合わせてご覧ください。
Ruby eachメソッドを範囲で使ってみよう
Ruby eachメソッドは、「範囲」でも使用することができます。
範囲は、配列やハッシュ(連想配列)と同じく、集まりを表すオブジェクトです。したがって、範囲でもeachメソッドが使用できます。
範囲は、最初の要素と最後の要素を..(ピリオド2個)で繋げて表現します。
【範囲の例】
1 |
range = 1..20 |
これで、rangeという変数に1~20までの数字が順番に代入されました。
では、範囲でeachメソッドを使ってみます。下のソースコードをご覧ください。
【範囲でeachメソッドを使う例】
1 2 3 |
(1..3).each do |number| puts number end |
【出力結果】
1 2 3 |
1 2 3 |
変数(ブロックパラメータ)であるnumberに1~3までの数字が順番に代入されてputsされました。
Ruby eachメソッドを範囲で使う解説は以上です。
Ruby eachメソッドをハッシュで使ってみよう
最後に、Ruby eachメソッドをハッシュ(連想配列)で使う方法を紹介します。
※ハッシュ(連想配列)があまり理解できていない人は、配列について解説した記事の「5:ハッシュ(連想配列)について」をご覧ください。
ハッシュ(連想配列)のキーと値を順番に取り出す時にも、eachメソッドが使えます。
変数(ブロックパラメータ)を2つ用意することで、キーと値を順番に取り出せます。
では、ソースコードの例をご覧ください。
【ハッシュ(連想配列)でeachメソッドを使う例】
1 2 3 4 |
items = {"鉛筆" => 100, "消しゴム" => 50, "ノート" => 200} items.each do |key, value| puts "#{key}は#{value}円です。" end |
【出力結果】
1 2 3 |
鉛筆は100円です。 消しゴムは50円です。 ノートは200円です。 |
※#{}は変数展開といいます。#{}の中に式や変数を入れると、その式や変数が文字列の中に展開されます。
【変数展開の例】
1 2 |
name = "Sato" puts "私の名前は#{name}です。" |
【出力結果】
1 |
私の名前はSatoです。 |
今回はkey、valueという2つの変数(ブロックパラメータ)を用意しました。
keyという変数には配列itemsのキー(鉛筆・消しゴム・ノート)が順番に代入されます。
valueという変数には、配列itemsの値(100・50・200)が順番に代入されます。
Ruby eachメソッドをハッシュ(連想配列)で使う解説は以上です。
いかがでしたか?Ruby eachメソッドの基本が理解できましたか?
プログラミング言語Rubyを学習した後は、Ruby on Railsというフレームワークを使ったWEBアプリケーションの開発にチャレンジしてみてください!
Ruby on Railsでも、今回学習したeachメソッドは大変よく使うので、eachメソッドは必ず理解しておきましょう。
はじめてのRuby on Rails入門-RubyとRailsを基礎から学びウェブアプリケーションをネットに公開しよう
Rails7対応。汎用性が高くPythonやPHPと同様に人気のある Rubyを使ってWebアプリケーション開発に挑戦しよう。基礎からAWSでの開発環境構築、Renderを使ってインターネットに公開するまでを体系的に学べる
\無料でプレビューをチェック!/
講座を見てみる評価:★★★★★
他の言語と比べて環境構築やバージョン管理などで躓くことが多く苦手意識のあるRubyですが、無事完了出来て良かったです。アプリ開発のレクチャーでもコードの記述ミスに何度か引っかかりました。個人的にはRenderを使って、ウェブサービス公開を体験できたのが良かったです。ありがとうございました。
評価:★★★★★
HTML・CSS・JavaScript・Ruby等Progateで一通りやってから受講しましたが、一度はつまづいてしまったRailsを使った学習をとりあえず最後までやることが出来ました。動画の最後にもありましたが完成したアプリを自分なりに編集したりして学習を続けたいと思います。
最新情報・キャンペーン情報発信中