久しぶりにruby関係のMLを真面目にみてみた

今まで配信されていたruby関係のMLも、正月で暇だったから真面目に目を通してみました。とりあえず、今年から流れたruby-dev/ruby-listのメールを対象に。

で、読んでみて面白かったのは、「[ruby-list:44431] コンストラクタの引数について&インスタンス変数の持ち方について」からはじまるスレッド。投稿者さんは、Rubyを通してオブジェクト指向を学ぼうという猛者。具体的な例を取り出して、「このときのコンストラクタインスタンス変数の持ち方について、どれがよい?」と質問。いろいろな方が回答やアドバイスを書かれています。

回答のなかで、Matzがruby-list44439にて以下のようにアドバイスされています。

これは「オブジェクト指向プログラミング」学習の罠で、現実世界を中途半端に反映した(正直に言うとあまり良くない)例題を導入してしまうと、現実世界の構造に引きずられて、必ずしも保守性の高くない設計をしてしまう可能性があります。確かに、現実の社会では車メーカーはタイヤをはじめとした部品をみずから作らないかもしれませんが、それを言い出すと、「正解」とは車オブジェクトを生成するためには、それこそ無数にある部品一つ一つを外側で生成して、newメソッドに渡してやることになりませんか。

しかし、そんなことをしたら無数のクラスを管理する必要がありますし、プログラムも必要以上に複雑になってしまいます。このような設計はソフトウェア工学的には明らかに間違いです。

僕のクラス設計は、直感や趣味で決めているので、たまぁに「使いにくそう。」って言われたりするんですが、「いつか、僕に感謝するときがくるんだよ。」って適当にごまかしてます。

そんなこんなで、各回答者さんのクラス設計に対する考えがみれて面白かったです。

あ、ruby-devも目を通したんだけど、よく理解できませんでした(^^;。[ruby-dev:32913] openの"b"とencodingがなんとなく関係ありそうかなぁ。「bはbinaryの読み書きのときに使う」って考えていたので、そこの意識を変える必要があるかも。