アクセスメソッド

広告

クラスの中で使われているインスタンス変数はクラスの外からは参照したり値を変更したりすることが出来ません。参照する場合も変更したい場合もインスタンスメソッド経由して行う必要があります。

例えば次のようなインスタンスメソッドを用意しておくことでオブジェクトを経由してインスタンス変数の値を取得したり変更したりすることが出来ます。

class Car
  def initialize(carname="未定義")
    @name = carname
  end
  
  def getName()
    return @name
  end
  
  def setName(newName)
    @name = newName
  end
end

car = Car.new()
car.setName("civic")
print(car.getName())

このようにメソッドを定義する事でオブジェクトからインスタンス変数の参照や更新が行えますが多くのインスタンス変数がある場合はメソッドを定義するだけでも大変です。そこでインスタンス変数への参照や更新が簡易的に行えるようにアクセスメソッドと呼ばれるものが用意されています。

用意されているアクセスメソッドは次の3つです。

定義式機能
attr_reader :変数名参照が可能
attr_writer :変数名更新が可能
attr_accessor :変数名参照と更新が可能

使い方は次のようになります。

class Car
  def initialize(carname="未定義")
    @name = carname
  end
  
  attr_accessor :name
end

上記のように対象となるインスタンス変数名に対して「attr_reader」「attr_writer」「attr_accessor」のいずれかを使って上記のように記述することでインスタンス変数の参照や更新用のメソッドを個別に定義する代わりとなります。

その為、上記のように記述した場合は更新も参照も行える設定となります。具体的には次のように記述します。

class Car
  def initialize(carname="未定義")
    @name = carname
  end
  
  attr_accessor :name
end

car = Car.new()
car.name = "civic"
print(car.name)

「オブジェクト名.変数名」で参照したり更新したりが直接行えます。(クラス外からインスタンス変数が直接操作できるようになったわけではなく、参照や更新が行えるメソッドが自動的に作成されたと考えて下さい)。

今回は「attr_accessor」を使いましたので更新も参照も可能です。「attr_reader」を使った場合は参照のみ可能で「attr_writer」を使った場合は更新のみが可能となります。

サンプルプログラム

では実際に試してみます。

ClassTest6.rb

class Car
  def initialize(carname="未定義")
    @name = carname
  end
  
  attr_accessor :name
end

car = Car.new()
car.name = "civic"
print(car.name)

上記を実行すると次のように表示されます。

アクセスメソッド

( Written by Tatsuo Ikura )