assert
javaと はどう違いif () {} else exit;
ますか?
if () {} else exit
代わりに使えassert
ますか?
グーグルのビット多分?
「覚えておくべき主なことは、if-elseステートメントはプログラムフロー制御に使用し、assertキーワードはテスト目的でのみ使用する必要があるということです。アプリケーションに必要な操作を実際に実行するためにassertを使用しないでください。 Sunの公式Javaドキュメントによると、「各アサーションには、アサーションの実行時に真になると思われるブール式が含まれています。」
私は主張を無視することができます
class A{
public static void main(String[] args) {
assert false;
System.out.println("hi");
}
}
このコードは、デフォルトで hi を出力します
$ java -cp . A
hi
$ java -ea -cp . A
Exception in thread "main" java.lang.AssertionError
at A.main(A.java:6)
if () {} else exit
代わりに使えassert
ますか?
はい、できますが...
条件を追加のフラグに依存させない限り、テストを無効にすることはできません(これにより、より複雑になります)。
finally
囲んでいるブロックで片付けを実行する機会がありません。
AssertionError
(またはその他の例外) がスローされた場合よりも、問題の原因をログに記録する方が複雑になります。
コードを別のアプリケーションで (そのまま) 再利用する必要がある場合、 への呼び出しにexit
問題が生じる可能性があります。
if-elseは、プログラムのフローを制御するためのものです。これにはassertを使用しないでください。アサートは、コードに「チェックポイント」を設定して、「常に」一致する条件をチェックするためのものです。
プログラムの実行時にアサートをオンまたはオフにして、開発マシン/統合環境でアサートを有効にし、リリースされたバージョンで無効にすることができます。
-ea
assertキーワードは、コマンドラインででアサーションを有効にした場合にのみ例外をトリガーします。if/elseは常に実行されます。その上、assertキーワードを使用すると、冗長性の低いコードを記述できます。比較:
assert parameter != null;
に:
if( parameter != null )
{
}
else
{
}
-eaパラメータが渡されない限り、アサートは無視されます。
java -ea myjar.jar
そうすれば、アプリケーションをテストするときにそれらを使用できますが、それ以外のときは無視してください。