[Ruby] ローカル変数 インスタンス変数 クラス変数
初めに
Rubyの変数宣言で、代表的なローカル変数、インスタンス変数、クラス変数についてまとめていく
※補足
本記事のメソッドとはクラスメソッド、インスタンスメソッドを含めたものを指します
ローカル変数
先頭が小文字、_
で宣言される。スコープは、変数が宣言されたところから、ブロック、メソッド、またはクラス・モジュール定義の終りまでであり、それ以外で参照することができない。
コード
class Variable def hoge var = 0 var += 1 puts var end def fuga puts var end def self.piyo puts var end end
コンソール
[1] pry(main)> i = Variable.new [2] pry(main)> i.hoge 1 => nil [3] pry(main)> i.fuga NameError: undefined local variable or method `var' for [5] pry(main)> Variable.piyo NameError: undefined local variable or method `var' for Variable:Class from ...
- hogeメソッド内で定義された
var
は、別のfugaメソッドでは参照できないことがわかる- クラスメソッドであるpiyoも
var
参照されていないことがわかる
インスタンス変数
先頭に@
で宣言される。スコープは、クラスのinitialize
メソッドとインスタンスメソッド内でのみ参照、定義することができる。また、インスタンスごとに独立した値を持つ。
コード
class Variable def hoge @var = 0 @var += 1 puts @var end def fuga puts @var end def self.piyo puts @var end end
コンソール
irb(main):001:0> i = Variable.new => #<Variable:0x00007fb71c670e50> irb(main):002:0> i.hoge 1 => nil irb(main):003:0> i.fuga 1 => nil irb(main):004:0> i_2 = Variable.new => #<Variable:0x00007fb71c682010> irb(main):005:0> i_2.fuga => nil irb(main):006:0> Variable.piyo => nil
クラス変数
@@
で宣言される。スコープはクラス、サブクラス、メソッド、別インスタンスでも共有される、グローバル変数である。
コード
class Variable def hoge @@var = 0 @@var += 1 puts @@var end def fuga puts @@var end def self.piyo puts @@var end end
コンソール
irb(main):001:0> i = Variable.new => #<Variable:0x00007fb71b49bd88> irb(main):002:0> i.hoge 1 => nil irb(main):003:0> i.fuga 1 => nil irb(main):004:0> i_2 = Variable.new => #<Variable:0x00007fb71b4a1530> irb(main):005:0> i_2.fuga 1 => nil irb(main):006:0> Variable.piyo 1 => nil