私は現在コード コントラクトをいじっていますが、コントラクト クラスの静的メソッドが条件の数学的表記法と競合するほど強力であるかどうかは完全にはわかりません。
単純な階乗法があるとしましょう
int Factorial(int n);
私は次の条件を表明します:
Precondition:
n >= 0
Postconditions:
Factorial(n) = 1, in case n = 0
Factorial(n) = n*(n-1)*...*1, in case n > 0
これらの条件は、Factial の動作を簡潔かつ明確な方法で明確に指定します。私の質問は、コード コントラクトを通じて表現できるかどうかです。
前提条件は簡単です:
Contract.Requires(n >= 0)
条件付き事後条件は、次を使用して表現できます。
if(n==0)
Contract.Ensures(Contract.Result<int>() == 1);
if(n > 0)
...
しかし、ここで「if」ステートメントが必要な方法は好きではありません。前条件と後条件の単純なリストが読みにくくなるためです。私は私たちが何かを持っていることを望みました
Contract.Ensures(...).InCase(...);
最後になりましたが、数学に関する一般的な表記法であるこれを表現する方法がわかりません。
n*(n-1)*...*1
ある種のループが必要になると思いますが、これは実装全体をコピーします。そのような表記法を表現するスマートな方法はありますか?
前もって感謝します。