Mooseに入門してみたよ

| 0 Comments | 0 TrackBacks | このエントリーをはてなブックマークに追加 このエントリーのはてなブックマーク件数

はじめまして、市川(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のすすめ

 http://d.hatena.ne.jp/hide-K/20080527/1211880701

No TrackBacks

TrackBack URL: http://perl-mongers.org/MT/mt-tb.cgi/36

Leave a comment

About this Entry

This page contains a single entry by ichikaway published on May 31, 2008 5:39 PM.

muxtapeのタイトルをRSSから取得する was the previous entry in this blog.

まめこタイトルからの卒業 is the next entry in this blog.

Find recent content on the main index or look in the archives to find all content.

Categories

Pages

Creative Commons License
This blog is licensed under a Creative Commons License.
Powered by Movable Type 4.2rc1-en