アクセスメソッドの種類と使い方

クラスの中で使われているインスタンス変数はクラスの外からは参照したり値を変更したりすることができません。参照する場合も変更したい場合もインスタンスメソッドを経由して行う必要がありますが、インスタンス変数への参照や更新が簡易的に行えるようにアクセスメソッドと呼ばれるものが用意されています。ここでは Ruby で利用可能なアクセスメソッドの種類と使い方について解説します。

(Last modified: )

アクセスメソッドの種類

インスタンス変数を外部から参照したり更新したりする場合、次の「getName」メソッドや「setName」メソッドのようなインスタンスメソッドを用意しておくことでインスタンスを経由してインスタンス変数の値を取得したり変更したりすることができます。

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"
puts(car.name)

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

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

サンプルコード

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

# encoding: UTF-8

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

car = Car.new()
car.name = "lexus"
puts(car.name)

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

アクセスメソッド

-- --

Ruby で利用可能なアクセスメソッドの種類と使い方について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。