2005/11/03 木
いま Perl で一番イケてるオブジェクト指向プログラミングを学ぶ
最近、現実逃避で「CPAN author にでもなるか」と思い、Perl でちゃんとしたモジュールを書くにはどうしたらいいかをチマチマ勉強しています。
で、そうなるとやっぱりオブジェクト指向なわけです。が、Perl は Java などに比べるとオブジェクト指向的な記述を前提としていないユルユルなプログラム言語 (あくまで主観ですが) なので、書き方も使い方も実現方法も色々あってどういう風にやるのが一般的なのかよくわかりません。普段から CPAN のモジュールを使っていればそれでもなんとなくわかるのですが、モジュール探すより先に手が動いてしまうタチなので深く経験・学習する機会もなく。
実は過去にオブジェクト指向っぽい書き方にチャレンジしてみたものの、書いてるうちに「一人で使っている分にはベタで書いたほうが早い」とか思い出してめんどくさくなってやめた経験もあったりします。Java だったら「やべー、このクラス超使える」とかいいながら toString() に無駄に凝ってみたりして楽しめるんですが、なんででしょう(^^;
とはいえ、実際に CPAN に登録するかは別として、再利用しやすいモジュールを書くには避けては通れない道なのは確か。なので、ある程度は自分で調べてそれなりに知識を蓄えた上で、いつもどおり naoya 先生にメッセで聞いてみました。
perlで一番イケテルOOなクラス&モジュールの記述方法はどんなんでしょうか (注意:原文ママ)
我ながらステキな質問文です。生半可な知識で「やっぱ○○?」とか聞いても逆にいい教えがもらえないかと思いこう聞いたのですが、いま思えば「一番モテる〜」って聞けばよかった(笑)。
そしたら以下のような教えが。
- ooba よ、Catalyst のコードを読むがいい
- Catalyst は Class::Accessor とか Class::Data::Inheritable とか NEXT.pm とかそういうのバリバリ使っているからバリバリ参考になるゼ!
- Class::DBI も参考になると思われ
- miyagawa さんの「Perlオブジェクト指向プログラミングメルマガ」を読むと全部書いてあるから嫁 (注意: 文章は適当に脚色してあります)
やっぱり Catalyst は手をつけなきゃダメかなぁ。NEXT.pm なんてあるの知りませんでした。
さらに setter とか getter の話をしていると、「素ではよくこう書きますね。これが面倒なら Class::Accessor」とその場でさらさらと実例を書いてくれました。
sub foo { my $self = shift; @_ ? $self->{foo} = shift : $self->{foo} }
さすが無駄のない記述。いつものことながらタメになるなぁ。
最後に「誰も書かないようなゲームのモジュール書こうかと思ってさー」とか話していると、「今日の Shibuya.pm で Monadius の話で盛り上がった。Haskell で書かれたグラディウス」と行けなくてがっかりしていた気分をさらにがっかりさせるような発言も…。行きたかったなぁ…。
以上、メッセのやりとりのメモでした(^^;)。
というわけで引き続きチマチマと勉強中。こんな質問にもしっかり答えてくれる naoya 先生は偉大です。








