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 #=>眠すぎ
グローバル変数
書き方:$を前置
スコープ:メソッドどころか、オブジェクトの壁ものりこえて有効。