多くの方法で定期的にチェックしたい事後条件があります。私はアサーションを正しく使用しているとかなり確信しています。つまり、コードが愚かなことをしていないことを確認するために何かをチェックするだけで、しばらくしてからアサーションをオフにするつもりです。しかし、私が今書いた後の状態が、私がいつも望んでいる状態とまったく同じであるかどうかはわかりません。だから私はそれをメソッドに入れました。しかし、その後、次の問題が発生しました。
public class Foo
{
public void doSomethingRisky()
{
//...
assert someBoolean();
}
private boolean someBoolean()
{
return bar && baz;
}
}
対。
public class Foo
{
public void doSomethingRisky()
{
//...
verifySomeBoolean();
}
private void verifySomeBoolean()
{
assert bar && baz;
}
}
無効なアサーションを使用してコンパイルした場合、前者のコードはsomeBoolean()
呼び出されないため、パフォーマンスに影響はありません。しかし、Javaは「スマート」であるため、アサーションを無効にすると、2番目の形式でもアサーションを無効にしてもパフォーマンスが低下しません。
そして、より重要な質問は、明らかに、どちらがより良い実践ですか?
私はそれが明示的であり、再解釈や誤解の対象ではないので好きですが、同じ基礎を主張する以外に何かassert someBoolean()
をするための動作を拡張したいので、他の形式はもう少し将来の証拠になるかもしれませんverifySomeBoolean()
ブール値。私の腸はそれが事実であるかどうかを言いますが、私は古いコードを収まるようにつぶそうとするよりも再コーディングする方が良いです。賢者からの言葉をいただければ幸いです。