問題の歴史:
assertメカニズムは、Java 1.4でロジックエラーや開発者の仮定をコード内で診断するために追加されました。assertは、実行時に期待される値と実際の値の不一致を明示的な例外をスローすることなく検出でき、assertのサポートがオフの場合、アプリケーションの最終版に含まれません。
問題:
通常のエラーチェック(例えば、ユーザー入力のチェック)の代わりにassertを乱用すると、またassertが稼働中のサーバーで無効化されるという理解の不足が原因で、エラーを見逃すことがある。
解決策:
assertは、プログラムが正しく動作する限り破られることがない論理的不変量にのみ使用されるべきであり、それが破られるとアプリケーションが明確に不正に動作します。
コード例:
public int divide(int a, int b) { assert b != 0 : "Divider should not be zero!"; return a / b; }
主な特徴:
Javaプログラムを実行する際にassertはデフォルトで動作しますか?
回答: いいえ、デフォルトではassertは無効です。-eaフラグを使用して明示的に有効にする必要があります。
assertはプロダクションコードで使用できますか?
回答: 推奨されません。assertionErrorは無視される可能性があります。assertは不変量とテストコードでのみ使用可能です。
assertと例外のスローはどのように異なりますか?
回答:
プログラマーがwebアプリケーションの入力データのチェックにassertを使用し、不正な値でクリティカルエラーを引き起こさせることができます。
利点:
欠点:
assertはアルゴリズム内の内部不変量にのみ使用され、ユーザーに対してはすべてのチェックが通常の例外を通じて行われます。
利点:
欠点: