Masteries

技術的なことや仕事に関することを書いていきます.

Class::Accessor::TypeというCPANモジュールを書いた

Class::Accessor::LiteやClass::Accessor::Lite::Lazyはサクッとオブジェクトのクラスを作ることが出来て便利なのですが, newするために初期値を渡す時や, rwないしwoでオブジェクトに値を書き込む時に, 渡された値のチェックが出来ない(例えば, 関数の引数をSmart::Argsでチェックするように...)という点が気になっていました.

MouseやMooを使えば良いという話題はありつつ, それよりももう少し軽量で, Class::Accessor::LiteにSmart::Argsでやっているような値のチェックが出来る程度のモジュールがあったら便利そうでは...? ということで, 若干車輪の再発明感もあったのですが, Class::Accessor::TypeというCPANモジュールを書いてみました. まだshipitはしていません.

github.com

...コードを読めばわかるのですが, まんまClass::Accessor::Lite + Smart::Argsの融合合体という感じのモジュールになりました(ついでに両方のモジュールを丁寧にコードリーディングする良い機会になって良かったです). 結果として, Class::Accessor::Liteのようにオブジェクトのクラスを定義しつつ, Smart::Argsで出来るような値の指定(isadefaultの宣言)が出来るようになっています.

特にimportの実装がもちゃっとしている点, あとはテストが書いていない点などまだまだ荒削りですが, 需要がありそうであればその辺りも整備してshipit出来ると良さそうかな, と思っています. ご意見ご感想などあれば, TwitterやIssueにてお知らせ下さい.