コードコントラクト/アサート:重複チェックとは?
私はアサート、コントラクト、または私が使用している言語で利用可能なあらゆる種類のチェックを書くことの大ファンです。少し気になることの1つは、重複チェックを処理するための一般的な方法が何なのかがわからないことです。 状況例:最初に次の関数を記述します void DoSomething( object obj ) { Contract.Requires<ArgumentNullException>( obj != null ); //code using obj } その後数時間後、最初の関数を呼び出す別の関数を記述します。すべてがまだメモリ内にあるのでDoSomething、nullオブジェクトを既にチェックしていることがわかっているので、コントラクトを複製しないことにします。 void DoSomethingElse( object obj ) { //no Requires here: DoSomething will do that already DoSomething( obj ); //code using obj } 明らかな問題:objがnullでないことを確認するためにDoSomethingElse依存しDoSomethingています。したがってDoSomething、これ以上チェックしないことを決定する必要があります。または、別の関数を使用する場合、objはもうチェックされない可能性があります。結局、私はこの実装を書くことにつながります: void DoSomethingElse( object obj ) { Contract.Requires<ArgumentNullException>( obj != null …