はじめに
今回はアクセッサメソッドに関する内容です。アクセッサメソッドは最初見た時なんだこりゃとなったのでまとめてみます。
確認してみた
環境はruby2.5.3です。
こちらの記事より抜粋させていただきます。
アクセッサメソッドは3つの種類があります。
attr_reader #read(読む)
attr_writer #write(書く)
attr_accessor #access(読むと書くの両方)
ということで、アクセッサメソッドを試してみます。
まず最初にattr_readerとattr_writerを記述したコードです。
class Cls
attr_reader :hoge
attr_writer :hoge
def initialize
@hoge = 1
end
end
x = Cls.new
x.hoge = 10
x.hoge
上記を実行すると、
irb(main):001:0> class Cls
irb(main):002:1> attr_reader :hoge
irb(main):003:1> attr_writer :hoge
irb(main):004:1>
irb(main):005:1> def initialize
irb(main):006:2> @hoge = 1
irb(main):007:2> end
irb(main):008:1> end
=> :initialize
irb(main):009:0>
irb(main):010:0> x = Cls.new
=> #<Cls:0x00005623d3e36ca8 @hoge=1>
irb(main):011:0> x.hoge = 10
=> 10
irb(main):012:0> x.hoge
=> 10
x.hoge = 10で@hogeに10を書き込み、x.hogeで書き込んだ10を読み出せています。
次にattr_accessorを記述したコードです。
class Cls
attr_accessor :hoge
def initialize
@hoge = 1
end
end
x = Cls.new
x.hoge = 10
x.hoge
上記を実行すると、
irb(main):001:0> class Cls
irb(main):002:1> attr_accessor :hoge
irb(main):003:1>
irb(main):004:1> def initialize
irb(main):005:2> @hoge = 1
irb(main):006:2> end
irb(main):007:1> end
=> :initialize
irb(main):008:0>
irb(main):009:0> x = Cls.new
=> #<Cls:0x00005592a4239df8 @hoge=1>
irb(main):010:0> x.hoge = 10
=> 10
irb(main):011:0> x.hoge
=> 10
x.hoge = 10で@hogeに10を書き込み、x.hogeで書き込んだ10を読み出せています。
最後に、アクセッサメソッドを使用しないパターンのコードです。
class Cls
def hoge
@hoge
end
def hoge=(hoge)
@hoge=hoge
end
def initialize
@hoge = 1
end
end
x = Cls.new
x.hoge = 10
x.hoge
上記を実行すると、
irb(main):001:0> class Cls
irb(main):002:1> def hoge
irb(main):003:2> @hoge
irb(main):004:2> end
irb(main):005:1> def hoge=(hoge)
irb(main):006:2> @hoge=hoge
irb(main):007:2> end
irb(main):008:1>
irb(main):009:1> def initialize
irb(main):010:2> @hoge = 1
irb(main):011:2> end
irb(main):012:1> end
=> :initialize
irb(main):013:0>
irb(main):014:0> x = Cls.new
=> #<Cls:0x000055b1fbbcf9c8 @hoge=1>
irb(main):015:0> x.hoge = 10
=> 10
irb(main):016:0> x.hoge
=> 10
x.hoge = 10で@hogeに10を書き込み、x.hogeで書き込んだ10を読み出せています。
上記の3つのコードは全て同じ結果を得ています。
おわりに
確認した結果、アクセッサメソッドは attr_reader(読む)、attr_writer(書く)、attr_accessor(読むと書くの両方) の3つの種類があることが分かりました。また、アクセッサメソッドを使用することにより、読み出し用と書き込み用のメソッドをわざわざ作成することなく、読み出し書き込みでき非常に楽だなと感じました。
もし誤っていたらご指摘いただけると助かります!
参考