8

Microsoftが.NET4のコードコントラクト相対関数に奇妙な方法で名前を付けていることに気づきました。

「require」と「ensure」の最後に「s」を追加するため、Contract.Requires()とContract.Ensures()がありますが、「assert」と「assume」の最後にはないため、Contractがあります。 .Assert()およびContract.Assume()。違いは私を少し混乱させます。

実際、私の本当の問題は、PHPでcode-contractを使おうとしているので、.NET 4の「Contract」クラスを模倣するものを作成することです。PHPにはパラメーターのタイプを検証する組み込みメソッドがないため、検証を行うために、自分のContractクラスにメソッドを追加します。「expect」という単語を選択します。「expectparameter'bar'は文字列であると思いますが...」は、パラメーターの型が間違っている場合の一般的なメッセージです。そして問題が発生します。メソッドにContract.Expect()という名前を付ける必要がありますか、それともContract.Expects()という名前を付ける必要がありますか?

私は英語を話さない国から来たので、英語が下手でごめんなさい。実際には英語の質問かもしれませんが、私を助けることができるのはプログラマーだけだと思います。この質問がここで適切でない場合は、申し訳ありません。

4

1 に答える 1

15

私は信じてEnsuresおり、どのメソッドが必要か、および/または保証するかを説明していますRequiresが、とは契約検証者へのコマンドです。AssertAssume

言い換えると、前者の 2 つはメソッドの外部インターフェイスに関する前提条件/事後条件を記述しますが、後者の 2 つはメソッド内でコントラクト検証者がその仕事を行うのを助けるための単なるメタデータです。1 つはユーザーに関連していますが、もう 1 つは関連していません。

于 2011-04-23T08:25:19.433 に答える