42

私はまだ Perl プログラミングに比較的慣れていませんが、Perl 5 OO が基本的にどのように機能するかは知っています。しかし、私は Perl 5 OO でプロジェクトを作成したことがないので、多くの落とし穴に突き当たることは間違いありません。

最近、 Mooseモジュールに関する誇大広告を発見しました。CPAN に関するいくつかのドキュメントを調べたところ、非常に興味深く、開発者として大いに役立っていることがわかりました。さらに、非常に安定していて信頼できるようです。

基本的な Perl 5 OO 構文に慣れるまで (ステージの背後で何が起こっているかを知るために) 作業を強化する必要がありますか?それとも、Moose を使用してアプリケーションの開発を直接開始する必要があると思いますか? または、マウスを試してみるべきですか?

それに関する考えや経験は大歓迎です。

前もって感謝します!

4

11 に答える 11

38

他の誰もが指摘しているように、PerlでのOOの実行方法の基本を学ぶことは、Moose以外のほとんどのパッケージだけでなく、Moose自体も基本的に標準のPerlOOレイアウトを使用するために役立ちます。基本的に、快適になったら、Moose :: Manual :: Unsweetendが、Perlのオブジェクト指向の原則を合理的に理解していることを示しています。ダミアン・コンウェイのオブジェクト指向Perlの本は、Perlのフレーバーだけでなく、オブジェクト指向期間の優れた入門書です。私はそれを読むこと、または少なくともその前半を読むことを強くお勧めします。

最後に、2つの非常に具体的なカテゴリに分類されない限り、マウス(Mooseの代替)を使用する理由はありません。起動時間の制約または依存関係の要件が厳しい場合があります。これらの2つの場所に該当しない場合は、ほとんどの場合、Mooseの方が適しています。

開示:私はMooseのコア開発者であり、Mouseに取り組んできました。

于 2009-06-11T16:17:29.783 に答える
32

Perl の世界のほとんどは Moose ではないため、他のすべてのモジュールを使用するには基本が必要です。

于 2009-06-11T12:22:35.433 に答える
21

正直なところ、Perl の未加工の OO プリミティブに関する知識が、新しいコードを作成する上でどれほど価値があるかわかりません。@ISA や "use base" や "bless" をコードで長い間使用していません。私が行う OO はすべて Moose MOP を介して行われます。(もちろん、インスタンスを rebless しますが、単に "bless" する代わりに $meta->rebless_instance を使用します。よりクリーンです!)

とにかく、私はまずムースを独学します。簡単に始めてすぐに生産性を高めることができ、Perl とプログラミング全般に習熟するにつれて詳細を理解できます。

例として:

#!/usr/bin/env perl

use strict;
use warnings;
use feature ':5.10'; # for 'say'

use MooseX::Declare;

class Point {
    has [qw/x y/] => ( is => 'ro', isa => 'Num', required => 1 );

    method new_from_ordered_pair(ClassName $class: Num $x, Num $y){
        return $class->new( x => $x, y => $y );
    }

    method distance(Point $a: Point $b){
        return sqrt( ($a->x - $b->x)**2 + ($a->y - $b->y)**2 );
    }

}

my $origin = Point->new_from_ordered_pair(0,0);
my $point  = Point->new_from_ordered_pair(3,4);

say '(3,4) is '. $point->distance($origin). ' units away from the origin.';

Perl の実装の詳細と格闘する必要がなくなったことに注目してください。Perl で OO を行う方法ではなく、プログラムの詳細について簡単に心配することができます。「Point.pm」ファイルを作成する必要さえありません。クラス定義をインラインにすることができます。

また、このコードは、Perl や Moose (または MooseX::Declare) の詳細に精通していないプログラマーでも、ほとんどすべてのプログラマーにとってすぐに理解できると思います。

(ところで、この例は、メソッド シグネチャの ":" 構文で少し奇妙に機能しました。通常、最初の引数として $self と呼ばれる自分自身のインスタンスを取得します。シグネチャの : の前に何か他のものを指定すると、変数の型と名前を変更することができます.また、毎回 new の引数として型を入力する必要がないように、"new_from_ordered_pa​​ir" も書きましx => $x, y => $yた.これは単なる砂糖です.

最後に、ここでは「無料」で多くのことを得ることができます。これらを試して、役立つエラー メッセージに注意してください。

Point->new; # x is required
Point->new_from_ordered_pair('foo', 'bar'); # x needs to be a number
$point->distance('some string'); # $b needs to be a Point

これらはすべて無料で入手でき、プログラムのデバッグが容易になります。これを避ける理由はありません。これにより、プログラミングが本当に楽しくなります (そして、プログラムの信頼性が高まります... 無料で!)

あ、もう一つ。Moose を使用すると、クラスをイントロスペクトできます。これはすぐには重要ではないかもしれませんが、あると便利です。Devel::REPL を開き、「do "test.pl"」と入力して Point クラスをロードし、次のように言います。

map { $_->name } Point->meta->get_all_attributes;

結果は['x', 'y']です。ソースコードがなくても、クラスが持つ属性を見つけることができます。「普通の」Perl OO でそれをやってみてください。(この種のことが、豊富な MooseX:: 名前空間を可能にします。イントロスペクションは必要ないかもしれませんが、CPAN から信頼できるモジュールを使用する機能を楽しむことができます。)

于 2009-06-12T02:58:30.773 に答える
18

Moose は優れていますが、それを学ぶかどうかの決定は、あなたの目標が何であるかによって異なります。

OO 手法を使用して独自のプログラムを書きたいだけなら、Moose に飛び込む価値は十分にあります (後で他の OO 手法について心配する必要があります)。

「Perl プログラマー」になりたい場合は、Moose OO コードよりも Moose OO 以外のコードに遭遇することが多いため、最初に Moose を使用せずにコーディングを扱うことを学ぶ必要があります。良い出発点として、Damian Conway による Object Oriented Perl をお勧めします。

于 2009-06-11T13:36:27.300 に答える
10

まずは基本に慣れてください。OO JavaScript をたくさんやったことがない限り、OO Perl は少し奇妙に見えるでしょうし、Moose や他のライブラリが行うことのいくつかは奇妙に見えるかもしれません。

于 2009-06-11T12:20:50.463 に答える
5

Moose を使い始めて、かなり気に入っています。Moose なしで OO perl を実行する方法を学ぶ必要があるという他の投稿に同意します。しかし、それは難しい傾向があり、それを行う方法はたくさんあります。新しいプロジェクトを始めるなら、Moose が最適です。

Object::InsideOut も使用しました。これは Moose によく似ており、オブジェクト変数が改ざんされるのを防ぐのにも役立ちます。

別の注意として、Perl 6 オブジェクトは Moose オブジェクトに非常に似ていることを理解しています。したがって、Moose を学ぶことで Perl 6 の準備が整います。

于 2009-06-11T13:31:16.923 に答える
4

Moose の前に Perl に付属する OOP を学びます。これにより、長期的には非常に簡単になります。

于 2011-08-05T03:20:53.817 に答える
2

Moose は便利ですが、漏れやすい抽象化の問題から身を守るために、適切な perl OO について学びたいと思うかもしれません。

Perl OO 自体はかなり複雑ですが、この本を読むと非常に簡単に理解できます: Intermediate Perl . 強くお勧めします。

于 2009-06-11T13:36:20.297 に答える
2

上記の有用な回答がたくさんあります。追加できる唯一のことは、Moose のマニュアルが本または PDF として購入できるようになったことです。Moose を学んでいる、または単に使用している場合、これは便利なリファレンス ガイドであり、きれいなタイポグラフィで印刷されています。

開示:私たちは本を作成しましたが(モンキー氏)、書いたわけではありません(それはデイブ・ロルスキーとステヴァン・リトルでした)。

于 2009-08-05T21:44:06.110 に答える