1. ホーム
  2. java

[解決済み] assert」キーワードは何をするのですか?重複

2022-06-09 09:10:58

質問

はどのようなものですか? assert は何をするのでしょうか? 例えば関数の中で

private static int charAt(String s, int d) {
    assert d >= 0 && d <= s.length();
    if (d == s.length()) return -1;
    return s.charAt(d);
}

どのように解決するのですか?

プログラムを起動する際に -enableassertions (または -ea 略)すると、この文は

assert cond;

if (!cond)
    throw new AssertionError();

このオプションを付けずにプログラムを起動した場合、assert文は何の効果も発揮しません。

例えば assert d >= 0 && d <= s.length(); は、質問で投稿されたように、次のように等価です。

if (!(d >= 0 && d <= s.length()))
    throw new AssertionError();

(で起動した場合 -enableassertions ということです)。


形式的には Java言語仕様です。14.10. は assert ステートメント には次のように書かれています。

14.10. は assert ステートメント

アサーションは assert ステートメントで、ブーリアン式を含んでいます。アサーションは 有効か無効かのどちらかです。 . アサーションが有効な場合、アサーションを実行するとブーリアン式が評価され エラーが報告されます。 と評価された場合 false . アサーションが無効になっている場合、アサーションの実行は何の効果もない。

ここで "有効または無効"。 -ea スイッチと "エラーが報告されます"。 というのは AssertionError が投げられたことを意味します。


そして最後に、あまり知られていない機能である assert :

を追加することができます。 : "Error message" のようにします。

assert d != null : "d is null";

で、投げられたAssertionErrorのエラーメッセージを指定します。


この投稿は記事として書き直されました ここで .