0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

アクセスメソッドについて(覚書)

Last updated at Posted at 2017-05-07

##アクセスメソッド

  • Rubyではオブジェクトの外部からインスタンス変数を直接参照したり、インスタンス変数に代入したりすることができない。
  • オブジェクトの内部の情報にアクセスするには、そのためのメソッドを定義する必要がある。
ruby

class Helloworld

  def initialize(myname)
    @name = myname
  end

  def name #@nameを参照する (最初のメソッド)
    @name
  end

  def name=(value) #@nameを変更する(2番目のメソッド)
    @name = value
  end

end

bob = Helloworld.new("Bob")

p bob.name # => "Bob"

p bob.name = "Robert" # => "Robert"

  1. 最初のメソッドnameは単に、@nameの値を返す。このメソッドは「属性」を参照しているかのように利用できる。
  2. 2番目のメソッドはname=という名前を持っている。

2.について

ruby

p bob.name = "Robert" # => "Robert"

一見、オブジェクトの属性のようなものに代入を行っているように見える、この文は実際はname=("Robert")というメソッド呼び出しを行っている。
このようなメソッドを用意すれば、インスタンス変数に外部からアクセスを許すことができるようになる。
しかし、インスタンス変数が幾つもある場合には何度もメソッドを定義するのは面倒かつ見つかりにくいミスが入り込みやすくなる。
そこで、これらのメソッドを簡単に定義するために用意されているのが以下。

  • attr_reader
  • attr_writer
  • attr_accessor

インスタンス変数名を示すシンボルを指定すると、同名のアクセスメソッドを自動的に定義してくれる。

アクセスメソッドの定義

定義 意味
attr_reader 参照のみ可能にする(nameメソッドを定義する)
attr_writer 変更のみ可能にする(name=メソッドを定義する)
attr_accessor 参照と変更の両方を可能にする(上記2つを定義)

先ほどのnameメソッドとname=メソッド定義する代わりに次のように一行書けば同じ意味になる。


class Helloworld

attr_accessor :name

.
.
.

end

<メモ>

インスタンス変数を設定するメソッドをライター、参照するメソッドをリーダーと呼ぶ。
これらのメソッドを合わせてアクセサーと呼ぶ。
リーダーのことをゲッター、ライターをセッター、アクセサーのことをアクセスメソッドということもある。

0
2
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
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?