Rubyのスコープについて

2020年06月27日

スコープとは

変数には、その変数が使える範囲というものが決まっています。これをスコープといいます。通常、メソッド内ではそのメソッド内で定義した変数しか利用することができません。

メソッド外で利用しようとするとエラーになります。

下図はイメージです。

違うスコープの変数を利用するには

引数には以下の2つのポイントがあります。

  • 引数は「メソッドを呼び出す部分」と「メソッドを定義している部分」両方に書く
  • 「メソッドを呼び出す部分」に書く引数と「メソッドを定義している部分」に書く引数の名前は、一致している必要はない

スコープがある意味

メソッド内と外では、同じ名前の変数を定義しても違う変数として処理されます。

その理由は、長いコードの中で誤って同じ変数を使った場合、全ての同じ名前の変数の値がおかしくなってしまうことを防ぐ為にこのような仕様になっている。

注意点

プログラミング言語によって仕様が違うの言語によって確認する必要があります。

次に例をあげます。

例
def rename(name)
  name = "Mr.#{name}"
end

name = "Tanaka"
#メソッドの呼び出し
rename(name)

#出力
puts name
=>Tanaka  <- Mr.Tanakaと表示されない

その理由は、ユーザー定義メソッドの外と中に同じ名前の変数が合計2個できてしまったことが原因です。

ちょっと見にくいですが、編集スキルが劣っているので今回は、私のノートをpdfで貼ります。すみません。

ノートをメモしたPDF