初めに
学習中に学んだことをアウトプットして知識定着を図ると同時に学習効率を上げる目的で書きます。
初学者にもわかりやすいように書いていきます。
アクセサとは?
- セッターとゲッターの役割を同時に果たすのがaccessor
ゲッターについて。
- インスタンス変数をクラス内から参照し、引っ張ってくるメソッド。
セッターについて。
具体例
class User def initialize(name) @name = name end #ゲッター def name @name end #セッター def name=(value) @name = value end end kouhei = User.new('kouhei') puts kouhei.name kouhei.name = 'takashi' puts kouhei.name
initializeメソッドによりインスタンス生成と同時にinitializeメソッドが働き、'kouhei'という値を受け取り@nameに格納される。
ゲッターであるnameメソッドにより@nameに格納された値を外部で取り出して出力するために定義。
puts kouhei.nameで出力することによってコンソールでkouheiが出力される。
次に値を更新するためにセッターであるname=(value)を定義する。
kouhei.name = 'takashi'とすることでkuheiから値はtakashiにインスタンス変数は更新されている。
もう一度puts kouhei.nameを実行することでtakashiが出力される。
3つのアクセサメソッドを利用して簡単に記述。
attr_reader(ゲッター)ゲッター部分を省略することができる。nameメソッド
attr_writer(セッター)セッター部分を省略できる。name=(value)メソッド
attr_accessor(ゲッターとセッター)両方省略できる。
attr_readerを利用したコード
class User # attr_accessor:name attr_reader:name # attr_writer:name def initialize(name) @name = name end #セッター def name=(value) @name = value end end kouhei = User.new('kouhei') puts kouhei.name kouhei.name = 'takashi' puts kouhei.name
attr_writer(セッター)を利用したコード
class User attr_writer:name def initialize(name) @name = name end #ゲッター def name # @name @name end end kouhei = User.new('kouhei') puts kouhei.name kouhei.name = 'takashi' puts kouhei.name
attr_accessorを利用したコード
class User attr_accessor:name def initialize(name) @name = name end end kouhei = User.new('kouhei') puts kouhei.name kouhei.name = 'takashi' puts kouhei.name
まとめ
ゲッターはクラス内からメソッドを参照するメソッド。
セッターはインスタンス変数に値を代入するメソッド。
ゲッター、セッターはそれぞれattr_reader、attr_writerに置き換えられる。
attr_accessorを利用することでゲッター、セッター両方のメソッドを置き換えられる。