アクセスメソッドの種類と使い方
クラスの中で使われているインスタンス変数はクラスの外からは参照したり値を変更したりすることができません。参照する場合も変更したい場合もインスタンスメソッドを経由して行う必要がありますが、インスタンス変数への参照や更新が簡易的に行えるようにアクセスメソッドと呼ばれるものが用意されています。ここでは 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 )
著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。