Write Code or Die

RubyやRailsまたはバスケットボールや筋トレについて書きます。

Rubyのattr_readerについて

  • :attr_readerRubyのオブジェクト志向の本とか、海外のブログの例ではよく見かける
  • 影響されて何も考えずに仕事で使ったら割と突っ込まれた
  • インスタンス変数に@ つけなくていいから楽だし見やすいからいいのかと思った
  • 突っ込まれる理由としては隠蔽した方がいいということ
  • ではなぜ本とかブログでは使われているか
  • 個人的な結論としては 隠蔽した方がいい という原則に囚われているので使うべきという結論に達した
  • initializeで渡したものを利用してインスタンス変数にしてる時点で外側から見えて困ることはない
  • むしろそのオブジェクトを構成している要素の中身がわかるので、見えた方がいい場合もある
  • Duckの様に鳴くからDuckの例を使うとすれば、Duckの足の長さがわかった方がそのDuckがわかるのではないか?的な?(わかりにくいか)
  • もちろんむやみに :attr_accesor を使うべきではないが、:attr_readerには問題はないのではないか?
  • また、順番に依存した処理にその変数を使いたい時はゲッタで使うべきではなく、メソッドの返り値からスタートして、ローカル変数で渡すべき
  • 従ってある変数が多用されるからむやみにゲッタメソッドをつけるのではなく、initializeで外側から渡してくる変数などそのクラスの構成要素となり機能を表しているようなものに対しては積極的に使うべきだと考えた
  • とはいえこれは宗教戦争みたいなもんなのかな

結論がまとまったので忘れないうちに雑に書きましたが、気分が乗ったらちゃんと書きます。何か知見があればコメントをいただけると幸いです。