Rubyにおける変数色々

Rubyにおける変数の種類

ほかに、疑似変数があるが本記事では省略。

 ローカル変数

書き方:小文字または_ではじめる。
スコープ:(宣言した位置から)その変数が宣言されたブロック、メソッド定義、またはクラス/モジュール定義の終わりまで。つまり、オブジェクトの壁やメソッドの壁を超えては参照できず、それが定義された場所でしか通用しない、名前通り極めてローカルなもの。

sample.rb
code

試しに、内側から呼び出してみる。

sample.rb
class Harahe
 my_feeling = "お腹へった!!"
 def tabetai
   puts my_feeling, "コンビニいこ" #tabetai内で定義されていないローカル変数を呼び出してみる
 end
end

harahe = Harahe.new
harahe.tabetai #=>undefined local variable or method `my_feeling'

繰り返す。やはり、オブジェクトの壁やメソッドの壁を超えては参照できず、それが定義された場所でしか通用しない

 インスタンス変数

書き方 : @を前置する
スコープ:クラス内で全メソッドで共通して使用することが出来る。クラスから作成されるオブジェクト毎に固有のもの。このようにインスタンスごとに独立してもつ変数だから、インスタンス変数という。

sample.rb
class Harahe
  def initialize(feeling)
    @feeling = feeling
  end
  def gaman
    puts @feeling,"・・・けど我慢しよ"
  end 
end

harahe = Harahe.new("お腹減った")
harahe.gaman #=>お腹減った!・・・けど我慢しよ
haraherinu = Harahe.new("腹へりぬ")
haraherinu.gaman #=>腹へりぬ・・・けど我慢しよ

今度はローカル変数とは異なり、メソッドをまたいで共有されていることがわかった。そして、インスタンスごとに異なった値をもつことができるということも証明された。

 クラス変数

書き方:@@を前置
スコープ:そのクラスおよびそこから生成されるオブジェクト(インスタンス)の中ならどこからでも参照可能。

:sample.rb
class Nemui 
 @@feeling = "眠すぎ"
 def nemu
  puts @@feeling
 end
end

nemui = Nemui.new
nemui.nemu #=>眠すぎ

 グローバル変数

書き方:$を前置
スコープ:メソッドどころか、オブジェクトの壁ものりこえて有効。