あるソフトウェアエンジニアの戯言

日々の開発やサーバ管理のなかで出てきたあれや、これや、あんなことや、こんなこと

この記事のキーワード:   Moose   perl

Moose::Coockbook

各Cookbookのレシピの目次

Mooseの基礎

Moose::Cookbook::Basics::Recipe1

シンプルなPoint のMooseによる実装例。
attribute とsubclass のデモ。

Moose::Cookbook::Basics::Recipe2

シンプルな銀行口座の例。もう少し複雑なクラス。
サブクラス内のメソッドとmodifier のデモ。

Moose::Cookbook::Basics::Recipe3

ちょっといい加減な二分木の例。
いくつかのattributeの機能のデモ。型(type), weak reference, predicate(どのオブジェクトに属しているのか), 初期値、それにattributeのアクション(''uction''と書かれているが''action''のTYPO?)

Moose::Cookbook::Basics::Recipe4

副型(subtype)と単純な会社クラス構造の構築。
独自の型の作成、 ''BUILD''メソッド(コンストラクタ)、 サブクラスでのオーバーライドの使い方を紹介。

Moose::Cookbook::Basics::Recipe5

副型(subtype)と強制(coercion)をつかったRequestクラス。
型の強制(coercion)を含む型についての追加の例

Moose::Cookbook::Basics::Recipe6

内部引数(?、 The Augment/inner)についての例
''augment'' method modifireのデモ。メソッドオーバーライドのような方法を提供する

Moose::Cookbook::Basics::Recipe7

immutable を使ってMooseを高速化。
アクセサやオブジェクトの動作を劇的に高速化するimmutable class を作る

Moose::Cookbook::Basics::Recipe8

トリガを使った複合連結の管理(TODO)
(まだ説明がありません)

Moose::Cookbook::Basics::Recipe9

Builderメソッドとlazy_build
builder機能はattributeの初期値に継承可能でroleを構成できる機能を提供する

Moose::Cookbook::Basics::Recipe10

演算子のオーバーロード、副型(subtype),強制(coercion)
演算子のオーバーロード、強制、副型を目の色が決定される仕組みをモデルにしてデモします。

Moose::Cookbook::Basics::Recipe11

BUILDとBUILDARGS(TODO)
この機能を解説するちょうどいいデモを求めています!!

MooseのRole

以下のレシピはどのようにしてMooseのRoleを使うかを解説しています。

Moose::Cookbook::Roles::Recipe1

Moose::Roleの例
trait とか mix-in などとして知られている role についてのデモ。 role は コードの再利用に関して サブクラスとは別のアプローチになる方法を提供します。

Moose::Cookbook::Roles::Recipe2

より進んだ role の使いかた - メソッドの外部定義(exclude)およびエイリアス(aliasing)
roleの一部分をクラスのなかに含めたいと思うことがあるでしょう。また,roleの全体を含めたいと思ったときにいくつかのメソッドがもともとあるメソッドと衝突することがあるかもしれません。メソッドの外部定義やエイリアスを使用すればこのような問題に対処できます。

Moose::Cookbook::Roles::Recipe3

実行時role制御
(まだ説明がありません)

Meta Moose

以下のレシピは Mooseを使ったオブジェクトシステムの拡張をおこなうための meta class の書き方を解説しています。

Moose::Cookbook::Meta::Recipe1

metaの世界へようこそ(どうしてmetaが必要なの?)
もし、どうしてこのmetaなるものが面白いのか、何を心配すべきなのかと考えているのであれば、このレシピを読んでください。

Moose::Cookbook::Meta::Recipe2

meta-attribute, ラベルつきattribute
Mooseを拡張するひとつの方法は attribute metaclass を使う方法です。attribute metaclass は has によるattribute を拡張し、追加のattributeの機能を使えるようにします。

Moose::Cookbook::Meta::Recipe3

attribute trait を使ったラベルの実装
拡張されたMoose の attribute metaclass は様々な機能をもたらします。ただし、attributeはひとつのmetaclassしか持つことはできません。roleをattribute metaclassに適用することによって、attributeの機能を構成することができます。

Moose::Cookbook::Meta::Recipe4

metaclass への ''table'' attribute の追加
あなたが作成したclassにより多くの情報を詰め込みたいなら、 "Moose::Meta::Class" を拡張しましょう。方法はいたって簡単ですが、もうちょっと砂糖を入れたいと思ったときは Moose::Cookbook::Extending::Recipe2を読んでください。

Moose::Cookbook::Meta::Recipe5

metaclass trait として実装された ''table'' attribute
この例は 前のレシピで実装した class の metaclass を metaclass trait として実装したものです。

Moose::Cookbook::Meta::Recipe6

immutabilization systemにhookをかける(TODO)
Mooseには ''immutabilization'' といわれる機能があります。''__PACKAGE__->meta()->make_immutable()'' をclass(やattribute, roleなど)を定義したあとに呼び出すことで、Mooseがどのようにしてオブジェクトの生成やattributeへのアクセスなど、そういったものを最適化するかを知ることができます。
metaclassを作成したら、immutabilization systemにhookをかける必要があるかもしれません。これは metaclass class, meta method classや可能ならmeta-instance classなどを含む多くのスポットを横断します。
このレシピはimmutabilize属性の拡張をおこなう方法を示しています。

Moose::Cookbook::Meta::Recipe7

meta-instance(TODO)
(まだ説明がありません)

Mooseの拡張

これらのレシピは更なるMooseの拡張や ''MooseX''モジュールの作成の方法について書かれています。

Moose::Cookbook::Extending::Recipe1

Mooseの拡張の概要
Mooseを拡張するには、いくつもの方法があります。このレシピでは、それぞれの方法について概要を示し、その方法がどういう場合に適切かを示します。

Moose::Cookbook::Extending::Recipe2

基本object class roleの構築
多くの基本object class拡張はroleによって構築することができます。この例ではclassに抽象的なMooseX::Debuggingモジュールを使った基本object class をデバッグするroleを示します。

Moose::Cookbook::Extending::Recipe3

alternate base object class の構築
Mooseを使っているとmeta extensionを持った、alternate(代理) base object classを使いたいと思うようなことがあるかもしれません。あるいは、"extends 'MyApp::Bsse'"とtypeすることなしに別の機能を持った同じような class を使いたいと思うようなことがあるかもしれません。

Moose::Cookbook::Extending::Recipe4

Moose.pmのような、Mooseスタイルの砂糖
このレシピでは、"Moose.pm"の置き換え方法を示します。"MooseX"モジュールAPIのようなもの、特にmetaclassやbase object classのデフォルト動作を変更したい場合など。

おつまみ

Moose::Cookbook::Snack::Keywords
Moose::Cookbook::Snack::Types

[トラックバック] トラックバックPingURL : http://blog.d-pad.co.jp/sugi/dblog/ping.fcgi/28
言及リンクのないページからのトラックバックは拒否される仕様になっておりますのでご注意ください。
Moose::Cookbook::Basics::Recipe3 - ちょっといい加減な二分木の例 概要 package BinaryTree; use Moose; has 'node' => (is => 'rw', isa => 'Any'); has 'parent' => ( is...
Moose::Cookbook::Basics::Recipe2 - 簡単な銀行口座の例 概要 package BankAccount; use Moose; has 'balance' => (isa => 'Int', is => 'rw', default => 0); sub deposit { my ($self, $amount) = @_; $self->balan...
Moose::Cookbook::Basics::Recipe1 - (古典的な)Point型の例 概要 package Point; use Moose; has 'x' => (isa => 'Int', is => 'rw', required => 1); has 'y' => (isa => 'Int', is => 'rw', required => ...
名前:
メールアドレス(任意):
参考URL(任意):

キーワードリスト

バックナンバー