分(1)はこちら,(⁠2)はこちらから。関数に型制約を導入する関数の引数と戻り値に対し型制約を適用することで,期待する値を限定でき堅牢さが高まります。2.001003を解説します。Function::Parametersはパフォーマンスこそ若干Type::Paramsに劣るものの(注1⁠)⁠,後述するコード検査が行える利点があります。注1)参考までにベンチマークスクリプトをサポートサイトに置いているので,興味がある人はご確認ください。Function::Parametersの使い方Function::Parametersは,funもしくはmethodキーワードで関数定義を行います。$msgと書けば,$msgがStrの型制約を満たすかを判定します。指定する型制約は,値が期待どおりか判定するcheckメソッドと,エラーメッセージを返すget_messageメソッドさえダックタイピングされていればよく,Type::Tinyはもちろん,Moose(あるいはMouse)::Meta::TypeConstraintも利用できます。$msg";}名前付き引数は:$nameのように変数名にコロンを付け,初期値は$name=DEFAULTのように指定できます。$name}Function::Parametersでコード検査を行う関数の引数が多すぎると誤用が起きることは容易に想像できます。Function::Parametersでは定義した関数から引数の数を含むメタ情報を抽出できるので,自動テストにこの検査を組込み,関数の引数の数が多すぎるコードを未然に防げます。}};done_testing;引数の個数の検査以外にも,型情報を用い,アプリケーションの事情を加味したコード検査もできます。堅牢生を高めるために,こういった実行時以外の検査を行えることは大きな利点です。0.02で,関数の処理結果も型制約でチェックできます。次のコードでは,関数の戻り値がStrかチェックしています。error!Function::Parametersと組み合わせて使うこともでき,引数と戻り値が期待する型が一目でわかり,可読性の向上も望めます。'OO'];Function::Returnでメタ情報を取得するFunction::Parametersと同様に,Function::Returnも戻り値に関するメタ情報を取得でき,コード検査などに利用できます。現在のバージョンでは,$info->typesで指定した型制約を取り出せます。[Str]関数呼び出しのコンテキストの固定Perlは関数の呼び出し方に応じて,関数の挙動を変更できます。具体的には,wantarrayの値に応じ,リストコンテキスト,スカラコンテキスト,ボイドコンテキストの分岐を行えます。おもしろいしくみで,慣れればコードを省力的に書くことを助けてくれます。アプリケーションの開発においては,アプリケーションロジックやチームメンバーは流動的です。チームの皆が慣れた状況は作りにくいため,アプリケーション開発ではコンテキストに応じた挙動変更は避けたほうがよいと考えます。Function::Returnは,明示されている型制約を優先し,内部的に関数の呼び出しのコンテキストを固定し,この問題を回避しています。次のように複数の型制約を指定した場合,リストコンテキストで呼び出すことを強要します。Strで返却する約束を優先するようになっています。Function::Returnのオプション設定Function::ReturnはReturnという関数の属性をエクスポートしますが,自分の好きに設定したい場合もあります。次のコードはOutという名前に変更しています。INT.以下はパフォーマンスを優先したい場合のオプションです。ERROR!戻り値の型チェックは,関数の処理が間違っていないかどうか確認するには便利ですが,本番環境ではパフォーマンスの都合で不要かもしれません。Function::Returnのオプションにno_checkを指定することで,型チェックをしないように変更できます。まとめ本稿では,始めに堅牢な開発を行うための予防策として,プラグマで構文チェックを厳しくする方法やPerl::Criticを用いた静的検査を紹介しました。次に,Type::Tinyで型制約を導入する方法を示しました。最後に,Function::ParametersとFunction::Returnで関数の入出力を動的に型チェックし,さらに関数のメタ情報でコード検査する方法を紹介しました。Perlの柔軟さを活かして,堅牢さを足すこともできると思っていただけたら幸いです。次回の執筆者は上川慶さんで,テーマは「Cを用いたPerl拡張入門」です。2011年に株式会社モバイルファクトリーに新卒入社。ソーシャルゲームの開発やプロダクトマネジメントに従事したのち,現在は,育成・採用・広報などのエンジニア組織の課題解決に取り組む。Associationのメンバーとして,YAPC::JapanやGotanda.pmなどのコミュニティを中心に活動している。2019」を開催しました。DAY1・DAY2の様子を注目セッションとともにお伝えします。LINEのエンジニア3名がイベントに先駆けて見どころを紹介します。コードの安全性・安定性を高める開発サイクル~テスト管理の効率を上げ,脆弱性診断を自動で行う~本連載では,連載「業務を改善する情報共有の仕掛け」を受けつつ,安全性・安定性を加えた開発サイクルについて考えていきます。若者世代から圧倒的な人気を誇るライブ配信&動画投稿コミュニティアプリ「MixChannel」(ミクチャ)の裏側(レコメンドシステムやサーバサイド開発など)について解説していきます。その他の連載CSS3アニメーションでつくるインターフェイス表現CSS3によるアニメーション表現を紹介していきます。その中でも,幅広い読者に応用してもらえるだろうインターフェイスを主なお題とします。MySQL道普請便り本連載では,MySQLを使ったアプリ開発・運用に関するノウハウをご紹介していきます。RecipeUbuntuの強力なデスクトップ機能を活用するための,いろいろなレシピをお届けします。JavaScriptセキュリティの基礎知識JavaScriptに関するセキュリティ上の問題はどこで発生し,どうすれば防ぐことができるのか?について解説していきます。〜システムをきちんと運用するための基礎知識システムは「作って終わり」ではなく,運用の中でさまざまな問題が発生します。問題の発生に備えて事前にどのような対応をしておくべきなのか,問題発生時に何をしなければならないのか,ポイントを解説していきます。きたみりゅうじの聞かせて珍プレーソフトウェア開発の現場で体験したトホホな失敗,思わずうなる珍プレーをきたみりゅうじ氏が四コママンガで紹介。Linuxのメンテナンスの傍ら,Linuxやオープンソースソフトと日々を過ごす著者が,その魅力とつきあい方を,エッセイ風味でお届けします。PRESS特別編集部員,さわやか笑顔のスーパーハカーはまちちゃんとネット大好き14歳わかばちゃんが,毎号,読者の皆さんから寄せられたおたよりを紹介します。皆さんの日頃の悩みにも答えちゃいますよ。]メールでのお知らせメールで次の案内をお送りしております。メールの配信を希望する方は,利用したい項目をチェックしてメールアドレスを入力し,[登録]ボタンをクリックしてください。UPDATES[ほぼ週間に1回]新刊メールマガジン[ほぼ週間に1回]電脳会議の各号案内[ほぼ1ヵ月半に1回]※変更する場合や停止する場合は,登録情報変更ページをご覧ください。※登録いただいたメールアドレスには,そのお知らせ以外,配信いたしません。Ltd.ページ内容の全部あるいは一部を無断で利用することを禁止します。個別にライセンスが設定されている記事等はそのライセンスに従います。