LoginSignup
2
0

【Ruby Gold3.1詰まったシリーズ】アクセッサメソッドについて

Last updated at Posted at 2023-12-15

はじめに

今回はアクセッサメソッドに関する内容です。アクセッサメソッドは最初見た時なんだこりゃとなったのでまとめてみます。

確認してみた

環境は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つの種類があることが分かりました。また、アクセッサメソッドを使用することにより、読み出し用と書き込み用のメソッドをわざわざ作成することなく、読み出し書き込みでき非常に楽だなと感じました。
もし誤っていたらご指摘いただけると助かります!

参考

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0