Ruby

【Ruby入門】eachメソッドのスコープとは?やさしく解説

※当サイトではアフィリエイトプログラムを利用して商品を紹介しています。

 

ひでまる
ひでまる
ひでまるです!今回はeachメソッドのスコープについて解説していきます!

 

スコープとは?

スコープとは、変数の使える範囲のことです!

  • この変数はここ〜ここまで使ってOK
  • この変数はここ以外で使っちゃダメー

この様な感じです!

eachメソッドのスコープとは?

eachメソッドにもスコープは存在します!
eachメソッド?という人は下記の記事を先にみてね!

eachメソッド内で作った変数は、外から使えない

 

ひでまる
ひでまる
実際にコードを見ていきましょう!

 

numbers = [1,2,3,4,5]

numbers.each do |n|
name = "太郎"
puts "私の名前は#{name}今取り出される数字は#{n}です"
end

結果
=>私の名前は太郎今取り出される数字は1です
=>私の名前は太郎今取り出される数字は2です
=>私の名前は太郎今取り出される数字は3です
=>私の名前は太郎今取り出される数字は4です
=>私の名前は太郎今取り出される数字は5です

 

数字1,2,3,4,5という数字が配列になっており、変数unmbersに格納されています
このnumbersに対して、eachメソッドを使い一つ一つとりだしています!
eachメソッドの中には、変数nameが定義されており、次の行で変数を式展開で入れ込み文字列を作っています。

ここで大切なことはnameという変数はeachメソッドの中で作られているということです!

それでは、nameをeachメソッドの外から呼び出して見ましょう!

numbers = [1,2,3,4,5]

numbers.each do |n|
name = "太郎"
puts "私の名前は#{name}今取り出される数字は#{n}です"
end

puts name  →eachメソッド内のnameを呼び出したい

結果
=>私の名前は太郎今取り出される数字は1です
=>私の名前は太郎今取り出される数字は2です
=>私の名前は太郎今取り出される数字は3です
=>私の名前は太郎今取り出される数字は4です
=>私の名前は太郎今取り出される数字は5です
=>undefined local variable or method `name' for....エラー

nameなんて定義されていないよというエラーが出てしまいました!!

eachメソッド内で作られた変数は、外から呼び出す事ができない
これがeachメソッドのスコープになります

 

eachメソッド外で作られた変数は、eachメソッド内で使える

 

ひでまる
ひでまる
実際にコードを見ていきましょう!

 

numbers = [1,2,3,4,5]
name = "太郎"

numbers.each do |n|
puts "私の名前は#{name}今取り出される数字は#{n}です"
end

puts name

結果
=>私の名前は太郎今取り出される数字は1です
=>私の名前は太郎今取り出される数字は2です
=>私の名前は太郎今取り出される数字は3です
=>私の名前は太郎今取り出される数字は4です
=>私の名前は太郎今取り出される数字は5です
=>太郎

このコードでは、nameという変数はeachメソッドの外で定義されています

puts "私の名前は#{name}今取り出される数字は#{n}です" の結果は
=>「私の名前は太郎今取り出される数字は1です」 ですね!

では、私の名前は太郎はどこのnameを参照しているのでしょうか?

numbers = [1,2,3,4,5]
name = "太郎"    ←ここを参照している

numbers.each do |n|
puts "私の名前は#{name}今取り出される数字は#{n}です"
end

 

この様に、eachメソッドの外にある変数はeachメソッドの中で使う事ができます!

ひでまる
ひでまる
eachメソッドの中で定義した変数は使えず…
外で定義した変数はeachメソッド内で使える…ややこしいですね…

 

まとめ

  • スコープとは、変数の使える範囲のこと
  • eachメソッド内で定義した変数はeachメソッドの外から使うことはできない
  • eachメソッドの外で定義した変数は、eachメソッド内で使う事ができる

-Ruby
-