質問

PerlプロジェクトでDbCを使用することを調査しており、ソース内のコントラクトを検証する最適な方法を見つけようとしています(たとえば、事前/事後条件、不変条件などを確認しています)

Class :: Contract はDamian Conwayによって作成され、現在はC. Garret Goebelによって管理されていますが、8年以上も触れられていないようです。

使用したいものは Moose のように見えます。 DbCに使用できる機能ですが、これを実行する方法に関するリソース(記事など)があるかどうか、または見つけられなかった有用なモジュールがあるかどうか疑問に思いました。

PerlでDbCをしている人はいますか? 「ジャンプ」するだけですMooseにアクセスして、何ができるか見てみましょうか。

役に立ちましたか?

解決

Mooseは、DbCを実行するための多くのツール(すべてではないにしても)を提供します。具体的には、before、after、aroundメソッドフック(こちら いくつかの例)を使用して、引数および戻り値に対して実行するアサーションを実行します。

「独自のDbCをロールする」代わりとして MooseX :: Method :: Signatures のようなモジュールを使用できます。 MooseX :: Method を使用して、サブルーチンに渡されるパラメーターの検証を行います。これらのモジュールは、「ポスト」を処理しません。または「不変式」ただし、DbCが通常提供する検証。

編集:この質問に動機付けられ、 MooseX :: Contract をCPANにアップロードしました。実際にDbCを実際に使用したことはないので、APIに関するフィードバックを取得したいと思います。

他のヒント

Mooseはperlの優れたooシステムであり、perlでオブジェクトをコーディングする人には心からお勧めします。 「サブタイプ」を指定できます;アクセサーまたはコンストラクターによって設定されたときに強制されるクラスメンバー用(関数のMoose :: Methodsパッケージで同じシステムを使用できます)。複数のライナーをコーディングする場合は、Mooseを使用してください。

DbCの実行に関しては、perl5には最適ではないかもしれません。保証がほとんどない言語では困難になります。個人的には、多くの動的言語ではありますが、特にperlでは、指導理念をDRYにし、テスト駆動開発を行う傾向があります。

Mooseの使用もお勧めします。

ただし、「代替」として Sub :: Contract をご覧ください。

著者を引用するには...

  

Sub :: Contractは、Perlのコントラクトパラダイムによってプログラミングの一部を実装する実用的な方法を提供します。

     

Sub :: Contractは、設計によるフレームワークではありません。

     

Sub :: Contractは、実行時に厳密な型指定をエミュレートするために、サブルーチンの入力引数と戻り値を非常に簡単に制約することを目的としています。

クラスの不変式が不要な場合、一部のプログラムでは、Perl Hacksの次の推奨事項が適切なソリューションであることがわかりました。 Smart :: Comments を参照してください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top