読書会でガヤガヤしてきました - 第29回 西日暮里.rb オブジェクト指向設計実践ガイド読書会
先日出版されました「オブジェクト指向設計実践ガイド」の読書会に参加してきました。
一言で言うと最高でした。
本についてはまあいまさら僕が説明するまでもない気はしますが、Sandi Metzルールで有名なSandi Metz氏が書いた本の和訳です。
原著は5年前に出版されていたそうですが先日和訳版が出版されました。
翻訳者であるtaiki__tさんが西日暮里.rbのオーガナイザーをやっているということでせっかくだから翻訳者を交えてやっていこうぜというイベントだったようです。
読書会というのの形式で一般的なのかはよくわかりませんが、今回は読む時間をとって、付箋になんやかんや書いて、貼って、ざっとトークするというのをやりました。
予習済みの想定なので読む時間は、あんまりとってなかったです。たぶん1章10分くらい?
僕は5章か6章まで読んでたんですが、その状態で1章2章をパラ見するという経験をして、それだけで結構面白かったです。
トーク部分は、ちょっと脱線することもあったけど言いたいことを言えたし聞きたいことを聞けたしという感じで大満足です。
付箋にはなんでも書いてよかったのですが、大別すると「わかる」「これみんなは実際どうしてんの?」「これさすがにおかしくね?」の3つくらいのレベル感のものがありました。
2つ目は、まあたとえば定量的な計測の難しい感覚的な部分についてどう思うかという質問であったりとか、チーム開発でこれを実践していくためにはどうやってます?とかそういう話でした。
トーク的に広がりがあって面白かったのは2, 3はまあそれぞれ言いたいことがあるので盛り上がって、あと1には具体的な事例がついてるとネタとしてよさそうです。
本に書いてあってそうだよね〜〜〜わかる〜〜って程度の部分はトーク的にはさらっと流してよさそうだなと思いました。 *1
トーク内容で特に記憶に残ってるのは、「メソッド分割しすぎって思うことがある」という話。
いままで「でっかいメソッドは悪。殺すべし」ということは教わってきたけど「分割しすぎ」って言われたことがないのでふーんって感じでした。具体的なコードをみて話したわけではないので、どういうレベルのものを指していっているのかが気になりました。
あと、僕以外だれも付箋つけてなかったけど本の中にある『オブジェクト指向とは「依存関係を管理すること」です』ってフレーズがあってかっこいいなって思いました。
「オブジェクト指向って何?」って聞かれたらどう答えるだろう。特に思いつかないけど。メッセージパッシングだよとかいってごまかしそう。
復習がてら読み直すにはいい会だったので第3章以降も開催されるといいなって思います。ぜひぜひ。
余談ですが買うなら物理本かgihyo digital publishing版がよさそうです。
Kindle版はコード部分のフォントがプロポーショナルで、しかも元ソースが =
でアラインするタイプのフォーマットなのでクソ読みづらいです。
追記
あんまり本の内容を書きすぎてもよくないかなとおもって基本的には書かないようにしていたのだけど、どうもSandi Metzの主張と食い違うところがあったのでそこだけは書いておくことにした。
クラス内からのインスタンス変数アクセスもメソッド呼び出しを経由せよ、という内容があった。
その恩恵の例として、ちょっと値を変更したときにも呼び出す側のコードを変更せずに済むので保守性が高いというのがあった。
class Foo def bar @bar end def some_method puts bar end def another_method puts bar * 2 end end
変更するとこんな感じ
class Foo def bar "bar: #{@bar}" end def some_method puts bar end def another_method puts bar * 2 end end
ここについて強く主張していたのはmtsmfmさんだったと思うけどこのコードはよくなさそう。
インスタンス変数 @bar
がある場合に bar
メソッドはインスタンス変数 @bar
を返すと期待してしまうけど実際は違う値が返ってくるから。驚き最小の原則に反する気がする。
@bar
にナニカ変更を加えた値を使うなら例えば bar_inspection
とかそういう別名メソッドを生やすべきでしょうよって感じの主張で、うんうんその通りだわって思った。*2