RubyのStructの使いどころ [オブジェクト指向設計実践ガイド ~Rubyでわかる 進化しつづける柔軟なアプリケーションの育て方] 2章
オブジェクト指向設計実践ガイド 2章
オブジェクト指向設計実践ガイド ~Rubyでわかる 進化しつづける柔軟なアプリケーションの育て方 を読み始めました。
2章では「単一責任のクラスを設計する」です。
クラスに対して質問してみる
クラスの持つメソッドを質問に言い換えたときに意味をなさない場合は、何か変なものを含んでいる可能性がある。
例に挙がっているGearとWheelの例は確かに狂ってるな、と思いますが、それがUserとPost、とかだと、意外とやってしまいがちかも。
一文でクラスを説明してみる
単一責任に保てているかを確かめるために、クラスの説明を書いてみて、○○とxxをする、、、となったらアウト。というよく言われる奴ですね。
Structの使いどころ 〜データ構造を隠蔽したいとき
2章読んで一番気になったのはここ。
StructにするかHashにしちゃうかで迷うことが多かったのですが、データ構造を隠蔽するためにStructを使う、という考え方、いいですね。
構造を持ってるならStruct
例のようにArrayが単なるArrayではなく構造を持ってしまっている時ってありますよね。Arrayの中身の順番に依存している場合はもはやArrayじゃないからStructにしよう。
Hashとの使い分けは「柔軟性を持たせたいのかどうか」
keyが動的に増えるようなものはHashで扱うほかない。それ以外はStructで構造を固めておく、という方針が良さそうだなと思いました。
Hashって使いやすいのでホイホイ使ってしまいますが、改めて考えてみると構造が柔軟すぎる故にコードの難読化を招いてるケースを結構みたことがあります。(今このHashってこのkey持っているんだっけ?次のメソッド行った後にkey,valueセットでぶちこまれるんだっけ?)
構造が決まってるなら最初に明示しておいてくれた方が安心して読み進められます。