将来の開発のために新しい .NET 4 Code Contracts機能を使用するつもりです。Contract.Requires(...)
これは、一連のメソッドで同等のステートメントを重複して指定する必要があるかどうか疑問に思いました。
コード例は千の言葉に値すると思います。
public bool CrushGodzilla(string weapon, int velocity)
{
Contract.Requires(weapon != null);
// long code
return false;
}
public bool CrushGodzilla(string weapon)
{
Contract.Requires(weapon != null); // specify contract requirement here
// as well???
return this.CrushGodzilla(weapon, int.MaxValue);
}
実行時チェックの場合、最終的には常に要件チェックにヒットし、失敗するとエラーが発生するため、それほど重要ではありません。
しかし、ここで 2 番目のオーバーロードでコントラクト要件を再度指定しないと、悪い習慣と見なされますか?
また、コンパイル時チェックの機能があり、場合によってはコード コントラクトの設計時チェックも行われます。Visual Studio 2010 の C# ではまだ利用できないようですが、Spec# のように既に利用できる言語がいくつかあると思います。これらのエンジンは、そのようなメソッドを呼び出すコードを記述し、引数が現在null
.
では、これらのエンジンは、現在満たされていないコントラクトを持つメソッドが見つかるまで、常にコール スタックを分析するのでしょうか?
さらに、ここでとの違いについて学びましたContract.Requires(...)
Contract.Assume(...)
。その違いも、この質問の文脈で考慮すべきだと思いますか?