はじめまして、市川(ichikaway)です。
最近、Moose, MooseというキーワードがPerlな人たちから聞こえてきたので、Mooseに興味を持ちました。
とりあえず入門してみたので、簡単に書いておきます。
Mooseって何?
Perl5のための現代的なオブジェクトシステムで、Perl5で手軽にオブジェクト指向プログラミングができるパッケージです。
詳細は下記を参照
http://okilab.jp/project/document/japanate/perldoc/html/Moose-0.12/Moose.htm
Mooseのインストール
cpanコマンドを実行してインストール
cpan
>install Moose
今までのPerl5でのオブジェクト指向プログラミング(OOP)
Mooseの話をする前に、今までPerl5ではどのようにOOPがされてたのでしょうか。
簡単な例です。
use strict; use warnings; package hogeclass; sub new { my $class = shift; my $self = { moji => shift, }; return bless $self, $class; } #setter,getter method sub moji { my $self = shift; if(@_){ $self->{moji} = shift; } else{ $self->{moji}; } } package Main; my $inst = new hogeclass('hogehoge'); print $inst->moji . "¥n"; $inst->moji('fuga'); print $inst->moji . "¥n";
Package Mainの中でhogeclassのインスタンスをnewで生成しています。
その際に、変数 mojiにhogehogeという文字列をセットしています。
Setter, Getterメソッドとして sub mojiというサブルーチンを用いています。
$inst->mojiで値を取得し、$inst->moji('fuga')で値をセットしています。
このようにnewやらセッター、ゲッターメソッドを毎回実装するのは面倒ですし、
変数にintなどの型を持たせたくなるとそれも実装しなくちゃいけなくて、萎えてしまいます。
Mooseで楽できるよ
Mooseを使うと、下記のように書けます。
package hogeclass; use Moose; has 'moji' => (isa => 'Str', is => 'rw'); package Main; my $inst = hogeclass->new(moji => 'hogehoge'); print $inst->moji . "¥n"; $inst->moji('fuga'); print $inst->moji . "¥n";
mooseですと、型の定義もできます。今回はmoji変数をStr型にしています。
では、今度はmojiの型をIntにしてみましょう。
has 'moji' => (isa => 'Str', is => 'rw');
を
has 'moji' => (isa => 'Int', is => 'rw');
に書き換えるだけです。
実行すると、
Attribute (moji) does not pass the type constraint
というエラーが出ます。
では、文字列を与えている箇所を数字に変えてみます
my $inst = hogeclass->new(moji => 10001);
にすると、今度は下記の箇所
$inst->moji('fuga');
でも文字列を与えているのでエラーが出ます。
ここも下記のように変更
$inst->moji(9999);
これで問題なし。このようにして、クラスを利用する際に型の制約を持たせることができました。
それ以外にも、
has 'moji' => (isa => 'Int', is => 'rw');
のrwを下記のようにroにするとリードオンリとなり、参照のみしかできません。
has 'moji' => (isa => 'Int', is => 'ro');
リードオンリにして値を
$inst->moji(9999);
のようにセットすると下記のエラーが出るようになります。
Cannot assign a value to a read-only accessor
最後に
今回は、Mooseの触りのところを書きました。
Mooseには様々な機能がありますので、興味を持った方はCookBookなどを参照すると良いかと思います。
http://search.cpan.org/~stevan/Moose-0.48/lib/Moose/Cookbook.pod
追記
ちょっと前にMooseに関して調べてた時は、Moose入門みたいな記事が見つからなかったので今回の記事を書いたのですが、よく調べたら色々とありましたので紹介させて頂きます。
はこべにっき#
Kansai.pmで発表されたMooseのPPTがあります
http://d.hatena.ne.jp/hakobe932/20080531/1212255159
初めてのMoose - Mooseのすすめ










