attr_accessorがイマイチわからん

こんにちは!kossyです!


さて、今回はattr_accessorについて、そもそも存在意義がわからなかったため、調べてみました。


attr_accessorって?
Progateで少し触りましたが、スライドの説明文には、

情報を持たせるためには、「attr_accessor シンボル」のようにします。
以下の図のようにすることで、Menuクラスのインスタンスに
nameという情報を持たせることができます。
また、この「name」という情報のことを
インスタンス変数と呼びますので覚えておきましょう。

出典:prog-8.com

使い方の説明しか記載されていませんでした。。。






わかりやすい説明文

bryankawa.hatenablog.com
attr_accessorの存在意義がわかりやすく説明されているとのことだったので
読んでみたのですが、
さっぱりわからん
となってしまいました。





getterとsetterについてあまりよく理解できなかったので、
調べてみました。


getterは、

@nameなどのインスタンス変数の値はクラス内からしか取得出来ません。
クラス外からインスタンス変数の値を取得するには、クラス内にdef nameのように定義する
このインスタンス変数の値を取得するためのメソッドを「ゲッター」と呼びます。

あぁ、あの実装はそういう意味があったのか、とすぐに理解はできたのですが、

setterは、def title=(val)
=(val)ってなんだよ、みたいに思ってしまいました。


def メソッド名=(val)については以下の記事が詳しく説明されていました。
bottoms-programming.com

def title=(val) とは

book.title = “test”

と「title」への代入式を書いた時に呼び出されるメソッド。
決して「title=(val)」というメソッドではない。


代入式を書いた時に呼び出されるメソッドだったのですね。


存在意義は

利用用途として、

・オブジェクトの属性を定義したい時
・(gemを作成する時、DBにアクセスする必要がない時)

が以下の記事に紹介されていました。
qiita.com




気をつけよう
RailsばっかりやっているとRubyの理解がおろそかになりがちですね。。。