attr_accessor
attr_accessorを理解する前に、インスタンス変数、ゲッター、セッターについてまとめます。
インスタンス変数
変数名の先頭に@をつけることで作ることができ、
同じオブジェクト内であれば、複数のメソッドをまたいで使うことができます。
またオブジェクトが存在する間はずっと使うことができます。
しかし!!オブジェクトの外側からは直接使うことができません!!!
なのでインスタンス変数の情報を外で使うためのメソッドを追加してみます。(ゲッター)
またインスタンス変数へ代入するメソッドもついでに作ってみます。(セッター)
class User # nameメソッドを作って、インスタンス変数@nameを戻り値とする(ゲッター) def name @name end # name=メソッドは引数で受け取ったデータをインスタンス変数@nameに代入している(セッター) def name=(text) @name = text end end user = User.new user.name = "太郎" puts user.name
実行結果
ruby user.rb 太郎
ゲッター
インスタンス変数を戻り値とするメソッドを追加して、それを呼び戻します。
短い書き方として、
attr_reader :変数名
があります。役割は「参照」
セッター
引数で受け取ったデータをインスタンス変数に代入します。
短い書き方として、
attr_writer :変数名
があります。役割は「更新」
ゲッターとセッターを使ってコードを書き換える
class User attr_reader :name attr_writer :name end user = User.new user.name = "太郎" puts user.name
attr_accessor
上記のゲッターとセッターの2つを合体させたのが、
attr_accessorメソッドです。
attr_accessorを使ってコードを書き換える
class User attr_accessor :name end user = User.new user.name = "太郎" puts user.name
attr_accessorを使うと、インスタンス変数を使うことができるようになり、
簡単にセッターとゲッターを実装することができるようになりました。