-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
0 parents
commit 0416d9d
Showing
48 changed files
with
7,489 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,191 @@ | ||
=encoding utf8 | ||
|
||
=head1 題名 | ||
|
||
Moose::Cookbook - Mooseの調理法 | ||
|
||
=head1 本文 | ||
|
||
このクックブックはMooseのさまざまな機能を紹介するレシピを集めたものです。ほとんどのレシピはある機能を紹介するコードを提示してからその詳細を説明するという形になっています。 | ||
|
||
まだの方はおそらく先にL<Moose::Manual>を読んだ方がよいでしょう。マニュアルの方ではあまりコードを使わずにMooseのコンセプトを説明しています。 | ||
|
||
=head1 レシピ | ||
|
||
=head2 Mooseの基本 | ||
|
||
ここでは、簡単なアトリビュートの宣言から、遅延評価、型、型変換、メソッドモディファイアといった、より強力な機能まで、Mooseの機能の概要をしっかり紹介していきます。 | ||
|
||
=over 4 | ||
|
||
=item L<Moose::Cookbook::Basics::Recipe1> - (毎度おなじみ) B<Point>の例 | ||
|
||
Mooseを使った簡単なクラスの例です。Mooseのアトリビュートやサブクラス化について説明します。 | ||
|
||
=item L<Moose::Cookbook::Basics::Recipe2> - 簡単なB<BankAccount>の例 | ||
|
||
もう少し複雑なMooseクラスの例です。サブクラスでメソッドモディファイアを利用する方法を説明します。 | ||
|
||
=item L<Moose::Cookbook::Basics::Recipe3> - 遅延評価を行うB<BinaryTree>の例 | ||
|
||
型、ウィークリファレンス、断定(「このオブジェクトにfooはありますか」)、デフォルト値、遅延評価、トリガといった、アトリビュートのいくつかの機能を説明します。 | ||
|
||
=item L<Moose::Cookbook::Basics::Recipe4> - サブタイプと簡単なB<Company>クラス階層のモデリング | ||
|
||
独自の型の作り方や使い方、C<BUILD>メソッド、サブクラスの中でのC<override>の使い方を紹介します。 | ||
|
||
=item L<Moose::Cookbook::Basics::Recipe5> - サブタイプふたたび、B<Request>クラスでの型変換 | ||
|
||
型変換の使い方など、型の使用例の続きです。 | ||
|
||
=item L<Moose::Cookbook::Basics::Recipe6> - augment/innerの例 | ||
|
||
C<augment>というメソッドモディファイアの使い方を説明します。これは通常のメソッドオーバーライドのやり方を「ひっくり返す」ものです。 | ||
|
||
=item L<Moose::Cookbook::Basics::Recipe7> - 不変化によるMooseの高速化 | ||
|
||
クラスを不変化するとアクセサやオブジェクトの生成が非常に速くなります。 | ||
|
||
=item L<Moose::Cookbook::Basics::Recipe8> - トリガを使った複雑なリレーションの管理 (TODO) | ||
|
||
(未執筆) | ||
|
||
このテストから原稿を起こすこと。 http://code2.0beta.co.uk/moose/svn/Moose/trunk/t/200_examples/007_Child_Parent_attr_inherit.t | ||
|
||
=item L<Moose::Cookbook::Basics::Recipe9> - ビルダーメソッドとlazy_build | ||
|
||
builder機能を使うと、アトリビュートのデフォルト値を継承やロールの合成を利用して用意できるようになります。 | ||
|
||
=item L<Moose::Cookbook::Basics::Recipe10> - 演算子のオーバーロード、サブタイプ、型変換 | ||
|
||
繁殖の際に目の色が決まる様子をまねながら、演算子のオーバーロードやサブタイプ、型変換の使い方を説明します。 | ||
|
||
=item L<Moose::Cookbook::Basics::Recipe11> - BUILDARGSとBUILDを使ってオブジェクトの生成に割り込む | ||
|
||
このレシピではC<BUILDARGS>とC<BUILD>を使ってオブジェクトの生成プロセスに割り込む方法を説明します。 | ||
|
||
=item L<Moose::Cookbook::Basics::Recipe12> - Mooseを使っていないベースクラスを拡張する | ||
|
||
このレシピでは、Mooseをいっさい利用していないL<DateTime>モジュールのサブクラスを、Mooseベースで作成します。 | ||
|
||
=back | ||
|
||
=head2 Mooseのロール | ||
|
||
ここではMooseのロールの使い方を紹介します。 | ||
|
||
=over 4 | ||
|
||
=item L<Moose::Cookbook::Roles::Recipe1> - Moose::Roleの例 | ||
|
||
ときにはトレートやミクスインとも呼ばれるロールの説明をします。ロールはサブクラス化とはまったく異なる方法でコードを再利用する手段を提供するものです。 | ||
|
||
=item L<Moose::Cookbook::Roles::Recipe2> - 高度なロールの合成――メソッドの排除と別名 | ||
|
||
ときにはロールの一部をクラスに組み込みたいだけとか、ロールをまるごと組み込みたいのにロールのメソッドとクラスのメソッドが衝突してしまうということもあります。メソッドを排除したり別名をつけたりすると、そういった問題に対処できます。 | ||
|
||
=item L<Moose::Cookbook::Roles::Recipe3> - オブジェクトのインスタンスにロールを組み込む | ||
|
||
このレシピでは既存のオブジェクトのインスタンスにロールを組み込んでみます。 | ||
|
||
=back | ||
|
||
=head2 メタMoose | ||
|
||
ここでは独自のメタクラスの書き方を紹介します。独自のメタクラスを使うとMooseが提供しているオブジェクトシステムを拡張できます。 | ||
|
||
=over 4 | ||
|
||
=item L<Moose::Cookbook::Meta::Recipe1> - メタの世界へようこそ(メタを使うわけ) | ||
|
||
この「メタ」というのはいったい何なのだろう、なぜ気にする必要があるのだろうと思われた方は、こちらの「レシピ」をご覧ください。 | ||
|
||
=item L<Moose::Cookbook::Meta::Recipe2> - メタアトリビュート、ラベル付きのアトリビュート | ||
|
||
Mooseを拡張する方法のひとつは、独自のアトリビュートメタクラスを提供することです。アトリビュートメタクラスを使うと、(C<has>による)アトリビュートの宣言や振る舞いを拡張して、アトリビュートに機能を追加することができます。 | ||
|
||
=item L<Moose::Cookbook::Meta::Recipe3> - アトリビュートのトレートを利用したラベルの実装 | ||
|
||
Mooseのアトリビュートメタクラスを拡張して機能を追加するのはすばらしいやり方ですが、アトリビュートが持てるメタクラスはひとつしかありません。アトリビュートのメタクラスにロールを組み込めば、アトリビュートの機能を合成できるようになります。 | ||
|
||
=item L<Moose::Cookbook::Meta::Recipe4> - メタクラスに「table」アトリビュートを追加する | ||
|
||
もっとクラスの情報を保存したい場合は、C<Moose::Meta::Class>を拡張する必要が出てきます。そうするのは簡単ですが、そうするとおそらくシュガー関数も提供したくなるでしょうから、L<Moose::Cookbook::Extending::Recipe2>もあわせてご覧ください。 | ||
|
||
=item L<Moose::Cookbook::Meta::Recipe5> - メタクラスのトレートとしての「table」アトリビュート | ||
|
||
このレシピでは前のレシピで見たクラスのメタクラスを、メタクラスのトレートとして再実装します。 | ||
|
||
=item L<Moose::Cookbook::Meta::Recipe6> - メソッドメタクラスを使ってメソッドをパブリックにしたりプライベートにしたりする | ||
|
||
このレシピではメソッドのプライベート化を実装した独自のメソッドメタクラスを紹介します。 | ||
|
||
=item L<Moose::Cookbook::Meta::Recipe7> - グロブリファレンスをメタインスタンスのクラスにする | ||
|
||
このレシピでは独自のメタインスタンスクラスを作成する例を紹介します。メタインスタンスというのはオブジェクトのインスタンスの内部構造を決定して、アトリビュートスロットへのアクセスを提供するものです。 | ||
|
||
=item L<Moose::Cookbook::Meta::Recipe8> - 不変化に割り込む (TODO) | ||
|
||
Mooseには「不変化」という機能があります。クラス(アトリビュートやロールなど)を定義したあとでC<< __PACKAGE__->meta()->make_immutable() >>を呼ぶと、Mooseにオブジェクトの生成やアトリビュートのアクセスなどを最適化させることができます。 | ||
|
||
独自のメタクラスを作成する場合、不変化システムに割り込む必要があるかもしれません。これはメタクラスのクラスやメタメソッドのクラス、それからおそらくメタインスタンスのクラスなど、さまざまな箇所に影響を与えます。 | ||
|
||
このレシピでは不変化を適切に処理する拡張モジュールの書き方を紹介します。 | ||
|
||
=back | ||
|
||
=head2 Mooseを拡張する | ||
|
||
ここではMooseを拡張する方法をもういくつか取り上げます。自分でC<MooseX>モジュールを書こうと思っている方には役に立つはずです。 | ||
|
||
=over 4 | ||
|
||
=item L<Moose::Cookbook::Extending::Recipe1> - Mooseの拡張モジュール概観 | ||
|
||
Mooseを拡張する方法はたくさんあります。このレシピではそれぞれの方法の概要を説明して、それぞれどんなときに使うのがよいかを紹介します。 | ||
|
||
=item L<Moose::Cookbook::Extending::Recipe2> - オブジェクトのベースクラス用のロールを用意する | ||
|
||
ベースオブジェクトクラスの拡張モジュールにはロールとして実装できるものがたくさんあります。この例では、抽象的なC<MooseX::Debugging>モジュールを使っているクラスならどれにでも組み込める、ベースオブジェクトクラスのデバッグ用ロールの作り方を紹介します。 | ||
|
||
=item L<Moose::Cookbook::Extending::Recipe3> - 別のベースオブジェクトクラスを用意する | ||
|
||
メタを拡張するだけでなく、別のベースオブジェクトクラスを用意したくなることもあるかもしれません。また、何度も何度もC<extends 'MyApp::Base'>とタイプしなくてもすべてのクラスに機能を追加したい場合もあるでしょう。 | ||
|
||
=item L<Moose::Cookbook::Extending::Recipe4> - Moose.pmのようにMoose風のシュガー関数を提供する | ||
|
||
このレシピではC<Moose.pm>のかわりになるものを用意するやり方を紹介します。C<MooseX>モジュールのAPIの一部として使いたい場合もあるでしょう(とりわけ新しいメタクラスのクラスやベースオブジェクトクラスをデフォルトにしたい場合)。 | ||
|
||
=back | ||
|
||
=head1 おまけ | ||
|
||
=over 4 | ||
|
||
=item L<Moose::Cookbook::Snack::Keywords> | ||
|
||
=item L<Moose::Cookbook::Snack::Types> | ||
|
||
=back | ||
|
||
=head1 参照 | ||
|
||
=over 4 | ||
|
||
=item L<http://www.gsph.com/index.php?Lang=En&ID=291> | ||
|
||
=back | ||
|
||
=head1 作者 | ||
|
||
Stevan Little E<lt>stevan@iinteractive.comE<gt> | ||
|
||
=head1 COPYRIGHT AND LICENSE | ||
|
||
Copyright 2006-2009 by Infinity Interactive, Inc. | ||
|
||
L<http://www.iinteractive.com> | ||
|
||
This library is free software; you can redistribute it and/or modify | ||
it under the same terms as Perl itself. | ||
|
Oops, something went wrong.