前回の(1)はこちらから。Mouse::Util::TypeConstraintsで独自の型を定義する(1)で,Mouse::Util::TypeConstraintsを利用して独自に型を定義できると紹介しました。(2)でその方法について解説します。Mouse::Util::TypeConstraintsは,自分で独自に型を定義するユーティリティを提供してくれるモジュールです。このモジュールはMouseというディストリビューションに含まれているため,Mouseをcpanmでインストールすることで利用できます。cpanmコマンドでインストールし,正しくロードできればインストールは成功しています。$Mouse::VERSION'独自の型を定義するユーティリティはいくつもあるため,その中で代表的なものを紹介します。そのほかの方法は,Mouse::Util::TypeConstraintsのドキュメントを参照してください。subtypeを使った既存の型の拡張subtypeを利用すれば,デフォルトで定義されている型や独自で定義した型から派生し,拡張できます。Language,ドメイン特化言語)のように利用できます。渡せるオプションは次のとおりです。asどの型から派生するかwhereその型が満たすべき制約。Perlのコードであればどんなものでも書ける。書いたコードが真を返せば制約を満たし,偽を返せば制約を満たさない型を定義できるmessage制約を満たさなかった場合のエラーメッセージ次のコードは,正の整数であるNatural型を定義するコードです。━(4)(1)のようにsubtypeを用いて型を定義します。whereとmessageの中では$_という変数が利用でき,中には型を利用した関数の引数に渡された値が代入されています。(2)の場合は引数が正の整数なので正常に実行できます。Naturalが出力され,エラーで終了します。(4)ではそもそもNaturalが継承しているInt型ですらないので,この場合もエラーとなります。Natural型からさらに派生し,5未満の正の整数という型NaturalLessThanFiveの定義もできます。};whereにはPerlのコードならどんなものでも書けるので,メールアドレスとして妥当である型EmailAddressを定義できます。CPANで公開されているEmail::Valid::Looseモジュールを使って次のように書きます。関数の引数に対して,列挙した文字列のどれかしか受け付けないように制約をかけたい場合があります。enumを利用すれば,そのような制約をかけるための型を定義できます。次のコードは,色として赤(red)・青(blue)・緑(green)のどれかしか受け付けない型を定義する例です。errorduck_typeを使った型の定義duck_typeを利用すると,指定したメソッドを持つオブジェクトのみを受け入れる型を定義できます。次のコードは,idメソッドとas_stringメソッドの両方を持つクラスのオブジェクトを受け入れる型を定義する例です。独自の型を定義する際,一つ注意点があります。それは,定義する型はグローバルな名前空間に作られることです。別々のパッケージで型を定義したとしても,名前が同じなら両方を読み込んだ際にコンフリクトし,あとから読み込まれたほうに上書きされます。ドキュメントによると,特定のパッケージで型を定義する場合,パッケージ名を含めた型名にすることが推奨されています。Blogパッケージでブログが取り得る状態を型として定義するなら,次のようにBlog::Statusという名前で定義します。private)];<続きの(3)はこちら。著者プロフィール柴崎優季(しばざきゆうき)1989年福井県生まれ。Webアプリケーションエンジニアとして,はてなブログなどのWebサービスの開発に携わってきた。そこにはヒットメーカーの極意があった噂の超高速分析データベースを試してみよう~ログ解析,機械学習なんでもござれ~ワールドワイドで3,500社以上が活用しているビッグデータ高速分析用のデータベース「Vertica」。クエリ性能を簡単に数百倍にする術をご紹介します。「JIRA」をはじめとするアトラシアンのツール群。多くのオープンソースソフトウェアを継続して提供する支えとなっている使い易さを探ってみます。Cloud」が,いよいよ日本でのサービスを本格的に開始します。その他の連載CSS3アニメーションでつくるインターフェイス表現CSS3によるアニメーション表現を紹介していきます。その中でも,幅広い読者に応用してもらえるだろうインターフェイスを主なお題とします。MySQL道普請便り本連載では,MySQLを使ったアプリ開発・運用に関するノウハウをご紹介していきます。RecipeUbuntuの強力なデスクトップ機能を活用するための,いろいろなレシピをお届けします。JavaScriptセキュリティの基礎知識JavaScriptに関するセキュリティ上の問題はどこで発生し,どうすれば防ぐことができるのか?について解説していきます。〜システムをきちんと運用するための基礎知識システムは「作って終わり」ではなく,運用の中でさまざまな問題が発生します。問題の発生に備えて事前にどのような対応をしておくべきなのか,問題発生時に何をしなければならないのか,ポイントを解説していきます。きたみりゅうじの聞かせて珍プレーソフトウェア開発の現場で体験したトホホな失敗,思わずうなる珍プレーをきたみりゅうじ氏が四コママンガで紹介。Linuxのメンテナンスの傍ら,Linuxやオープンソースソフトと日々を過ごす著者が,その魅力とつきあい方を,エッセイ風味でお届けします。PRESS特別編集部員,さわやか笑顔のスーパーハカーはまちちゃんとネット大好き14歳わかばちゃんが,毎号,読者の皆さんから寄せられたおたよりを紹介します。皆さんの日頃の悩みにも答えちゃいますよ。]メールでのお知らせメールで次の案内をお送りしております。メールの配信を希望する方は,利用したい項目をチェックしてメールアドレスを入力し,[登録]ボタンをクリックしてください。UPDATES[ほぼ週間に1回]新刊メールマガジン[ほぼ週間に1回]電脳会議の各号案内[ほぼ1ヵ月半に1回]※変更する場合や停止する場合は,登録情報変更ページをご覧ください。※登録いただいたメールアドレスには,そのお知らせ以外,配信いたしません。Ltd.ページ内容の全部あるいは一部を無断で利用することを禁止します。個別にライセンスが設定されている記事等はそのライセンスに従います。