【Java】アサーションを使用する

Javaにはアサーションという、検証コードを記述する機能が備わっています。

アサーションコードを記述するとプログラムの特定の地点で条件が成立しているかを検証できます。

成立していない場合はAssertionErrorがスローされます。

使用方法は

assert 条件;

になります。

この検証コードを有効にするにはJavaの実行コマンドの引数に-eaを付加します。

例えばこんな感じ

java -ea Test

この引数がない場合、検証コードは無視されます。

それでは実際にサンプルコードを実行し、動作を確認してみましょう。

public class Test {
	
	public static void main(String[] args) {
		double result = average(8, 0);
		System.out.println(result);
	}
	
	//平均処理
	static double average(double a, double b) {
		
		//0以外で割らないとダメ!
		assert b != 0;
		
		return a / b;
	}
}
実行結果
Exception in thread "main" java.lang.AssertionError
        at Test.average(Test.java:12)
        at Test.main(Test.java:4)

assert構文には条件が不成立の場合に付加するエラーメッセージなどを指定できます。

こんな感じ

assert 条件 : エラーオブジェクト;

実際に試してみましょう

public class Test {
	
	public static void main(String[] args) {
		double result = average(8, 0);
		System.out.println(result);
	}
	
	//平均処理
	static double average(double a, double b) {
		
		//0以外で割らないとダメ!
		assert b != 0 : "0以外で割らないとダメ!";
		
		return a / b;
	}
}
実行結果
Exception in thread "main" java.lang.AssertionError: 0以外で割らないとダメ!
        at Test.average(Test.java:12)
        at Test.main(Test.java:4)

このassert構文はプログラムの検証に用いるものです。

メソッドの引数に渡されたデータがメソッドの機能の前提条件の範囲内であるかを検証する際やメソッドの結果が条件の通りであるかなどです。

それ以外の場合はプログラムの本処理で例外チェックなりifでチェックするようにしてプログラムを組まなければいけません。

上記に示したサンプルプログラムは使用例としては微妙なのかもしれません・・・私ならassertではなくIllegalArgumentExceptionをスローするようなプログラムにするでしょう。

使うとしたら・・・例えば特定のキーを持つデータはシステム上一つしか存在しない前提で大量のリストデータの中に複数ないことを検証コードとして埋め込むのだったらありかなと思いますね。

・・・

・・・んーむ、この機能使ってる人間いるのかなぁ?

Java

Posted by nompor