moose Perl と oop Perl の違いは何ですか?
なぜ oop Perl の代わりに Moose Perl を使用しているのですか?
Moose Perl は OO Perl です。Moose は、Perl 5 OO システムの上に構築されたオブジェクト フレームワークです。
Moose が提供するのは、OO Perl をより使いやすく、より堅牢にするための多数のツールです。Perl のオブジェクト システムは非常に必要最小限のものです。これは非常に強力ですが、自分ですべてを行う必要があることも意味します。たとえば、純粋な OO Perl で 2D 平面の点を表すオブジェクトを実装する方法を次に示します。
package Point;
use strict;
use warnings;
use Carp 'croak';
sub new {
my $class = shift;
my %args = @_;
# do a lot of complex and potentially buggy validation here
# to make sure you have both an X and a Y coordinate, that
# they're both numbers, etc.
return bless \%args, $class;
}
次に、いくつかのアクセサーとミューテーターを作成する必要があります
sub x {
my $self = shift;
my $val = shift;
$self->{x} = $val;
}
上記のコードはバグがあります。その理由(理由)はわかりますか?パラメータに対してもこれを複製する必要がありy
ます。コードをコピーして貼り付けるか、少なくともシンボルをエイリアスして C&P を回避できます。
Moose では、この定義は次のとおりです。
package Point;
use Moose;
has 'x' => (is => 'rw', isa => 'Int');
has 'y' => (is => 'rw', isa => 'Int');
これが何をするか:
strict
にしwarnings
てあなたのためにx
を検証するコンストラクタを設定しますy
x
およびy
フィールドの (バグのない) アクセサーとミューテーターをセットアップします。わずか 4 行のコードで、これらすべて (実際にはそれ以上) を無料で入手できます。
Perl OO の仕組みにまだ慣れていない場合は、Perl OO チュートリアルを読む (そしてもう一度読む) ことをお勧めします。
次に、Moose について読み始めます。Moose::Manual PODは素晴らしい出発点です。