Java の assert キーワード

Rupam Yadav 2023年10月12日
  1. Java の条件として assert を使用する
  2. Java で assert condition : expression を使用する
  3. コードの到達不能部分が実際に到達不能であるかどうかを確認する
  4. 内部不変量の場合
Java の assert キーワード

Java では、assert キーワードを使用してアサーションを有効にできます。この関数は、プログラムに関する仮定をテストするために使用されます。Java でアサーションを使用する方法は 2つあり、この記事ではそれらに取り組みます。

Java の条件として assert を使用する

アサーションは、プログラムのバグを検出して修正するための最も迅速で簡単な方法です。アサーションは、実行時に true と見なされます。そうしないと、false の場合にアサーションエラーがスローされます。

ここで、assert 条件はブール式です。

public class JavaAssertCheck {
  public static void main(String args[]) {
    String[] names = {"John", "Mary", "David"};
    assert names.length == 2;
    System.out.println("There are " + names.length + "  names in an array");
  }
}

出力:

There are 3  names in an array

アサーションは無効になっています。したがって、このプログラムはエラーを表示せずにコンパイルおよび実行されます。ただし、アサーションが有効で条件が false の場合、JVM はすぐに AssertionError をスローし、プログラムを停止します。

Exception in thread
    "main" java.lang.AssertionError at JavaAssertCheck.main(JavaAssertCheck.java : 5)

Java で assert condition : expression を使用する

このアサーション形式では、条件が false と評価された場合、式は AssertionError のコンストラクターに渡されます。アサーションが有効で、以下に示す仮定が偽の場合、渡された式を詳細メッセージとして持つ AssertionError が表示されます。

このメッセージは、エラーを正しく識別し、エラーを修正するのに役立ちます。

public class JavaAssertCheck {
  public static void main(String args[]) {
    String[] names = {"John", "Mary", "David"};
    assert names.length == 2 : "The assertion condition is false.";
    System.out.println("There are " + names.length + "  names in an array");
  }
}

出力:

Exception in thread "main" java.lang.AssertionError: The assertion condition is false.
	at JavaAssertCheck.main(JavaAssertCheck.java:5)

ここでは、Java でアサーションの概念を利用できる特定の条件を示しています。

コードの到達不能部分が実際に到達不能であるかどうかを確認する

public void unReachableCode() {
  System.out.println("Unreachable Code");
  return;
  assert true;
}

フローに到達してはならないと思われる場所に仮定を置くと、この関数は到達不能ステートメントの削除時にエラーを表示します。

内部不変量の場合

アサーションが利用可能になる前は、多くのプログラマーがコメントを使用して、プログラムに関する仮定を文書化していました。以下の多方向 if ステートメントに示されているように、else ケースについての仮定を説明する何かを書きたいと思うかもしれません。

public class JavaAssertCheck {
  public static void main(String args[]) {
    int n = 37;
    if (n % 3 == 0)
      System.out.println("n % 3 == 0");
    else if (n % 3 == 1)
      System.out.println("n % 3 == 1");
    else
      assert n % 3 == 2 : "Assumption is false. " + n;
  }
}

アサーションは、ユーザーが自分で引数を指定できるため、渡された引数をチェックするためにパブリックメソッドで使用しないでください。したがって、失敗して AsssertionError が発生する可能性があります。アプリケーションが正しく機能するために必要なタスクを管理するためにアサーションを使用しないでください。例として、リストから null 要素を削除します。

原則として、アサーションに含まれる式には副作用がないようにする必要があります。

著者: Rupam Yadav
Rupam Yadav avatar Rupam Yadav avatar

Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.

LinkedIn