perlベストプラクティス インサイドアウトのクラス
2007/02/17
perlベストプラクティスをちょっと前に買ったのですが、最初の方に忠告の例としてこんな忠告が書かれてました。
コードを書くときには、あなたのプログラムを保守する誰かが、 あなたの居場所を知っている凶暴な変質者であると心得よ
こうゆうユーモア嫌いじゃないです。(勿論忠告としても正しいと思いますが)
オブジェクトの章でインサイドアウトという言葉が出てきました。(まだ100%理解してません)
インサイドアウトのクラス
ハッシュベースのクラスでなく、インサイドアウトのクラスの方を推奨してました。この本を見るまでインサイドアウトというものを知りませんでした。
インサイドアウトのクラスでは、コンストラクタで、hash参照をblessするのではく、スカラー参照をblessするものらしいです。インスタンス変数へのアクセスを、blessされたインスタンスから行なえなくする(メソッド経由にする)ことで、カプセル化が実現できるということのようです。あと、クラスを提供する側からすると、存在しない変数にアクセスしたらエラーになるというのも、利点になります。
で、チョット検索してみたら、Object::InsideOut と Class::InsideOut というモジュールが。。。Class::InsideOutは、まあまあ、良さそうでした。Object::InsideOutの方は、説明が長いのでしっかり見てません^^;
インサイドアウトのクラスの感想。
堅牢なクラスを書くために、クラスを書く人が、まわりくどいことをしなきゃならない、という印象でした。一人で行なう開発で、自分でクラスを作って、自分で使うような場合だと、面倒。複数人での開発を、perlでやる機会があれば、導入してみたいと思いました。