Ruby on Rails -アクセサメソッド-

オブジェクトの外側からインスタンス変数を直接参照や代入することはできないので、

そのようなことをするためには、専用のメソッドを定義しなきゃいけない。

例えば、

class HelloWorld

 def name

  return @name

 end

 def name=(value)

  @name = value

 end

end

b = HelloWorld.new()

b.name=('Bob')

puts b.name

まず、bという名前でHelloWorldクラスのオブジェクトが生成(new)される。

name=(value)メソッドを呼び出して、Bobが@nameに格納され、

nameメソッドを呼び出して@nameがreturnされ、putsで出力される。

(@nameはインスタンス変数)

つまり、結果:Bob、となる。

しかしこれだとインスタンス変数を参照・変更するために

このようなメソッドを定義しなければならないし、非常に面倒。

そこでRubyにはこれを自動でやってくれる便利メソッドがある。

それを用いると以下のように書き換えられる。

class HelloWorld

 attr_accessor :name

end

b = HelloWorld.new()

b.name=('Bob')

puts b.name

ここでの、attr_accessor :name、がそれにあたる。アクセサメソッド。

アクセサメソッドを宣言し、:name のようにメソッド名を表すシンボルを指定するだけ。

ちなみに、アクセサメソッドには3種類あって、

attr_reader :name

attr_writer :name

attr_accessor :name

上から「参照のみ」・「変更のみ」・「参照と変更」をそれぞれ可能にする。

まだしっくりこない気もするけど、使ってみれば便利メソッドであることがわかる。