<この記事はこんな人におすすめ>
- each文について知りたい人
- each文の仕組みがわからない人
- Ruby入門者
<この記事でわかること>
- each文の作り方
- each文の実行の仕組み
- each文の変数の取り扱い(スコープ)
eachメソッドによる繰り返し処理
Rubyを使っていると、繰り返し処理を使いたくなることがあります。例えば次のサンプルコードをみてください。
変数namesには’Suzuki’といった名前が配列で代入されています。この配列に含まれる名前を表示したい時に、名前のインデックス番号を用いて今回は表示しているのがわかると思います。
names = ['Suzuki', 'Kato', 'Tanaka'] puts "名前は#{names[0]}です" puts "名前は#{names[1]}です" puts "名前は#{names[2]}です" # => # 名前はSuzukiです # 名前はKatoです # 名前はTanakaです
もしこの名前が1000個あって、全ての名前を表示したい場合、1000個も記述するのは大変ですよね。そんな時に役に立つのがeachメソッドによる繰り返し処理です。
each文の書き方
eachメソッドを使った繰り返しの書き方の基本事項は以下の通りです。
配列.each do |変数名| #実行したい処理 end
forを使った繰り返し文もかけますが、Rubyではeachメソッドを使った繰り返しの方が好んで使われます。
each文の仕組み
図のように「|」で囲まれた変数に配列の要素が順番に入ります。その上でeach文の中身の処理が実行されます。図の処理を文章で書くと次の通りです。
- 変数nameに’Suzuki’が代入される。each文の中の処理が実行される。
- 変数nameに’Kato’が代入される。each文の中の処理が実行される。
- 変数nameに’Tanaka’が代入される。each文の中の処理が実行される。
each文の中の変数名(今回はname)は、好きな名前をつけることができますが、配列の変数名(今回はnames)の単数形にすることが慣習上多いです。
each文の変数の取り扱い
each文の中の変数の基本的な取り扱いについては以下の通りです。
- each文の中で各要素が1つずつ代入される|変数|は、each文の中、つまりeach文のdoからendまでの間でしか使えない
- each文の外で変数を使おうとするとエラーになる
- each文の外で定義した変数はeach文の中でも使うことができる
次のサンプルコードをみてください。変数nameはeach文中でしか使用できず、each文の外で使おうとするとエラーになってしまいます。
names = ['Suzuki', 'Kato', 'Tanaka'] massage = 'こんにちは' names.each do |name| #nameは使用可、massageは使用可 end #nameは使用不可、massageは使用可
それぞれの変数を使うことができる範囲のことを変数のスコープと呼ぶので覚えておいてください。
まとめ
というわけで今回はeachメソッドによる繰り返し処理についてまとめておきました。繰り返し処理はよく出てくるので、自然と覚えてしまうと思います。ぜひマスターしたいですね。