Java アサーション(プログラムのバグ探し)



新米太郎
新米太郎

皆さんこんにちは新米です。

今回はJavaで使われるアサーションについて記事ををまとめて見たよ!

アサーションとは?

アサーションとは、プログラマが前提としている条件をチェックし、プログラムの正しい動作
を保証する為の機能です。

例えば、、プログラマのA君が「ここの処理結果はtrueになる」ようにプログラムを書いても、実際に実行して見ない限り分かりません。

そこでアサーション機能を使用することで、trueにならなかった場合は、エラーを表示することができ、バグの検出に有効です。

どんな時に使われる?

プログラムにバグを残さない1つの手段として使われます。

プログラムのバグを見つける方法と覚えとけばOKです!

お客様にプログラムをリリースする段階では、AssertionErrorがスローされないレベルに達している必要があります。

実際に使ってみよう

アサーション機能を利用するには、assertキーワードを使用します。

< 構文 >
① assert boolean 式;
② assert boolean 式 : メッセージ;

 

assertキーワードの後に記述するboolean式には、プログラム実行時にtrueになるべき式を記述します。(つまりfalseの場合はエラー)

下記の(例)では引数のnumが0より大きい値を受け取ることがプログラムの前提となっています。

もし実行時にnumが0未満だった場合、AssertionErrorが発生しメッセージを定義した場合はメッセージも表示されます。

例)構文②の場合
private void test(int num){
    assert (num > 0) : "numの値は" + num;
    //testメソッドの処理
}

Boolean式の実行された結果、falseが返った場合「AssertionErrorオブジェクト」がJava実行環境よりスローされます。

アサーションを使用したファイルのコンパイルと実行

class Test{
    private int test(int num){
        assert (num > 0) : num + "不正な値です。";
        return num * 100;
    }
    int method(int num){
        return test(num);
    }
}
public class Main {
    public static void main(String[] args) {
        Test obj = new Test();
        System.out.println(obj.method(10));
        System.out.println(obj.method(-1));
    }
}

今回、numの値が0未満の場合”AssertionError“が起こります。

コンパイル時点アサーション機能は有効になっているが、実行時は無効になっている為
Javaコマンドの -eaオプションを使用し有効にします。

 

◇実行時にアサーションが無効な場合
通常どおりの実行となる。

××××××××>javac Main.java

××××××××>java Main
1000
-100

 

◇実行時にアサーションが有効な場合
falseの場合AssertionErrorが表示される。

××××××××>javac Main.java

××××××××>java -ea Main
1000
Exception in thread “main”  java.lang.AssertionError: -1不正な値です。
	at Test.check(Main.java:3)
	at Test.method(Main.java:7)
        at Test.main(Main.java:14)

まとめ

いかがだったでしょうか。

開発において、どうしてもバグは付き物です。。
そんなバグの見落としを避けるために、アサーションは私たちを助けてくれます。

実際にコードを書いて学んでいってください!

新米太郎
新米太郎

最後まで読んでくれてありがとうございました👍



コメント

タイトルとURLをコピーしました