この質問のコードは私に考えさせました
assert(value>0); //Precondition
if (value>0)
{
//Doit
}
私はifステートメントを決して書きません。主張するだけで十分です/あなたができるすべて。「早くクラッシュし、頻繁にクラッシュする」
CodeCompleteの状態:
- assert-statementは、アプリケーションを正しくします
- if-testはアプリケーションを堅牢にします
無効な入力値を修正したり、コードをスキップしたりして、アプリケーションをより堅牢にしたとは思いません。
assert(value >= 0 ); //Precondition
assert(value <= 90); //Precondition
if(value < 0) //Just in case
value = 0;
if (value > 90) //Just in case
value = 90;
//Doit
これらの修正は、外界について行った仮定に基づいています。呼び出し元だけがあなたの関数の「有効な入力値」が何であるかを知っており、彼はあなたの関数を呼び出す前にその有効性をチェックしなければなりません。
CodeCompleteを言い換えると、「アサーションだけに依存しないと、実際のプログラムは乱雑になりすぎます。」
質問:私は間違っていますか、頑固で、愚かで、防御的すぎます...