こんにちは!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