ほとんどの場合、例外を使用してコード内の条件を確認しますが、アサーションを使用するのが適切なタイミングはいつでしょうか?
例えば、
Group group=null;
try{
group = service().getGroup("abc");
}catch(Exception e){
//I dont log error because I know whenever error occur mean group not found
}
if(group !=null)
{
//do something
}
ここでアサーションがどのように当てはまるか教えていただけますか? アサーションを使用するべきでしょうか?
実稼働コードではアサーションをまったく使用しておらず、単体テストでのみアサーションを使用しているようです。ほとんどの場合、例外を使用して上記のようにチェックを実行できることはわかっていますが、それを「専門的に」行う適切な方法を知りたいです。
ベストアンサー1
私の考えでは(リストは不完全で、コメントに収まらないほど長いかもしれませんが)、私はこう言います。
- パブリックまたは保護されたメソッドとコンストラクタに渡されるパラメータをチェックするときに例外を使用する
- ユーザーとやりとりするとき、またはクライアントコードが例外的な状況から回復することを期待するときに例外を使用します。
- 発生する可能性のある問題に対処するために例外を使用する
- プライベート/内部コードの前提条件、事後条件、不変条件をチェックするときにアサーションを使用する
- アサーションを使用して自分自身や開発チームにフィードバックを提供する
- アサーションは、起こる可能性が非常に低いものをチェックするときに使用します。そうしないと、アプリケーションに重大な欠陥があることを意味します。
- 自分が(おそらく)真実だと知っている事柄を述べるためにアサーションを使用する
つまり、例外はアプリケーションの堅牢性に対処し、アサーションはアプリケーションの正確性に対処します。
アサーションは簡単に書けるように設計されており、ほとんどどこでも使用できます。私は次のような経験則を使っています。アサーション ステートメントが馬鹿げているように見えるほど、価値が高く、埋め込まれる情報も多くなります。正しく動作しないプログラムをデバッグするときは、経験に基づいて、より明らかな失敗の可能性を確実にチェックします。次に、発生してはならない問題をチェックします。まさにこのとき、アサーションが大いに役立ち、時間を節約します。