オーダーメイドコース
icon
icon

assertの使い方!Javaのアサーションを使う方法【初心者向け】

初心者向けにJavaのアサーションの使い方について解説しています。アサーションを使うことによってプログラムが正しく動作するかを確認することができます。assertステートメントの書き方、実行後の結果の見かたについてサンプルで学びましょう。

テックアカデミーマガジンは受講者数No.1のプログラミングスクール「テックアカデミー」が運営。初心者向けにプロが解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。 ※ アンケートモニター提供元:GMOリサーチ株式会社 調査期間:2021年8月12日~8月16日  調査対象:2020年8月以降にプログラミングスクールを受講した18~80歳の男女1,000名  調査手法:インターネット調査

この記事では、Javaのアサーションの使い方(assertステートメントの書き方)について解説します。

実際にプログラムを書いて説明しているので、ぜひ理解しておきましょう。

Javaのアサーションを利用することで、プログラムの動作状況を正しく理解することができます。

実務でも、、Javaのアサーションを利用した、テスト開発を行いますので、是非学習してみてくださいね。

そもそもJavaについてよく分からないという方は、Javaとは何なのか解説した記事を読むとさらに理解が深まります。

なお本記事は、TechAcademyのオンラインブートキャンプJava講座の内容をもとに作成しています。

 

田島悠介

今回は、Javaに関する内容だね!

大石ゆかり

どういう内容でしょうか?

田島悠介

アサーションの使い方について詳しく説明していくね!

大石ゆかり

お願いします!

アサーションとは

アサーションとは、プログラムが正しく動作していることを確認するための手法のひとつです。日本語で「表明」と言うこともあります。

プログラムの各所にその時点で必ず真(true)となるはずの条件を宣言しておくと、実行時にその条件が満たされない状態になるとJavaが自動でそれを検出し、例外をthrowします。

例外がthrowされればプログラムに何らかの誤りがあることがわかります。

アサーションを利用することで開発者は、誤りを修正しより誤りの少ないプログラムを作成するのに役立てることができます。

 

アサーションの使い方(assertステートメントの書き方)

Javaでのアサーションは、「assert」ステートメントを使って表現します。

「assert」ステートメントの書き方は、次のいずれかです。

assert 条件;
assert 条件 : メッセージ;

「条件」には、その時点で必ず真(true)となるはずの式を書きます。例えば「価格は必ず正の値である」ということを表す「price > 0」といったものです。

この条件が満たされないことがあれば、Javaが自動で例外「AssertionError」をthrowします。

「メッセージ」には、例外「AssertionError」のコンストラクタに渡すメッセージ(String)を書くことができます。

複数の「assert」ステートメントを使っている場合にどの箇所で例外が発生したのかをわかりやすく知らせるのに役立ちます。

 

[PR] 未経験からWebエンジニアを目指す方法とは

実際に書いてみよう

例として、「価格と数量から合計金額を算出する」プログラムにアサーションを取り入れてみましょう。

サンプルプログラム仕様

  1. プログラム引数で価格と数量を受け取り、数値に変換します。
  2. 価格と数量の両方が、正の値であるかチェックします。
  3. いずれも正の値であれば、計算メソッド「sum」で計算を行い、結果を表示します。
  4. 計算メソッド「sum」では、計算処理の前に「assert」ステートメントを使って、sumメソッドを呼び出した時点では価格と数量が必ず正の値である(2.でチェックしているため)、ことを表明します。
  5. いずれかが正の値でなければ、メッセージ「価格と数量には正の値を指定してください」を表示します。

10+3のサンプルプログラム

import java.util.*;
public class Calculator {
	public static void main(String[] args) {
        // 1.
        int price = Integer.parseInt(args[0]);
        int num = Integer.parseInt(args[1]);
        // 2.
        if (price > 0 || num > 0) {
            // 3.
            int sum = sum(price, num);
            System.out.printf("%d * %d = %d%n", price, num, sum);
        } else {
            // 5.
            System.out.println("価格と数量には正の値を指定してください");
        }
    }
    private static int sum(int price, int num) {
        // 4.
        assert price > 0 : "price: " + price;
        assert num > 0 : "num: " + num;
        
        return price * num;
    }
}

10+3のサンプルプログラム実行結果

10+3のサンプルプログラム解説

import java.util.*;では、Javaを動作させるためのライブラリをインポートしています。

public class Calculator {では、Calculatorクラスを宣言しています。

public static void main(String[] args) throws Exception {では、Javaを読み込んだ時実行される処理を宣言しています。

int price = Integer.parseInt(args[0]);では、1番目の整数の引数を変数priceに代入します。

int num = Integer.parseInt(args[1]);では、2番目の整数の引数を整数numに代入します。

if (price > 0 || num > 0) {では、変数priceが0より大きいか、または、変数numが0より大き場合という条件分岐を指定しています。

int sum = sum(price, num);では、関数sumの引数に変数priceと変数numを指定して、その結果を変数sumに代入しています。

System.out.printf(“%d * %d = %d%n”, price, num, sum);では、変数priceと変数numと変数sumを表示しています。

%dという文字が3つありますが、前から順番に、変数priceと変数numと変数sumの値が入ります。

変数priceが10で、変数numが3だったので、変数sumには、10と3を掛け算した結果の30が入っています。

表示結果は、10 * 3 = 30です。

} else {では、if (price > 0 || num > 0) {の条件に合致しない場合の条件分岐を指定しています。

System.out.println(“価格と数量には正の値を指定してください”);では、if (price > 0 || num > 0) {に合致しなかった場合、「価格と数量には正の値を指定してください」と表示される処理をしています。

}では、} else {の処理を終了しています。

}では、public static void main(String[] args) throws Exception {の処理を終了しています。

private static int sum(int price, int num) {では、関数sumを宣言しています。

関数sumの引数には、整数の変数priceと変数numを指定できます。

assert price > 0 : “price: ” + price;では、アサーションを利用して、変数priceが0より大きいか調査しています。

assert num > 0 : “num: ” + num;

assert num > 0 : “num: ” + num;dでは、アサーションを利用して、変数numが0より大きいか調査しています。

return price * num;では、変数priceと変数numを掛け算した結果を戻り値として返(return)します。

}では、private static int sum(int price, int num) {を終了しています。

}では、public class Calculator{を終了しています。

Eclipseでサンプルプログラムを実行する方法

基本的な実行方法

Eclipseでサンプルプログラムを実行するためには、Calculator.javaを右クリックして、実行を選択して、実行の構成をクリックします。

引数の部分で「10 3」と入力します。

2種類の引数の場合は間を半角スペースで区切ります。

実行結果は次のとおりです。

引数に0を指定した場合

引数に「0 3」のように指定しても計算自体は可能です。

実行結果でアサーションが有効にならない

今回のプログラムでは0より大きい引数が指定されていない場合は、アサーションがエラーを表示します。

しかし、EclipseのVM引数の指定をしない場合は、アサーションが動作せず次のような実行結果になります。

アサーションを有効にする引数

Eclipseでアサーションを有効にするには、VM引数に「-ea」を指定します。

実行結果でアサーションが有効になる

0を引数に指定した場合、アサーションがエラー処理を検知し、エラー表示がされます。

    コマンドプロンプトから実行する方法

    Eclipseではなくコマンドプロンプトから実行する場合は次のようなコマンドで実行します

    java -ea Calculator 10 3
    

    「-ea」というオプションは、「アサーションを有効にする」という意味です。

    「-ea」というオプションを指定しない場合はプログラム中に書かれた「assert」ステートメントは無視されます。

     

    まとめ

    アサーションを利用することで、プログラムが正しく動作していることを確認することができました。

    アサーションを利用したプログラムをコマンド利用する場合、「-ea」というオプションを指定すると動作しました。

    Javaのコマンドライン引数の書き方についてはこちらの記事を参考にしてみてください。

    Eclipseを利用する場合は、VM引数に「-ea」というオプションを指定すると、アサーションが動作しました。

    初心者必見!Java開発環境の構築手順(Windows編) も参考にしてみてください。

     

    この記事を監修してくれた方

    中本賢吾(なかもとけんご)
    アジマッチ有限会社 代表取締役社長
    開発実績:金融・小売・製造業種の基幹システムから人工知能を利用した大規模Webサービスまで20年以上の開発実績。経営者目線で、開発言語にとらわれない横断的なマネジメントを行うCTO業務や、新規事業開発を行う前段階のプロトタイプ開発、事業会社非IT社員向けDXプログラミング思考研修を得意とする。
    ボランティア活動:小学生がオリジナルAndroidアプリをGooglePlayでリリース、NHK Whyプログラミング入賞、全国Programing Festival入賞、中学生がSNS型PWAアプリリリースする岡山市クラブ講座活動を行っている。

     

    大石ゆかり

    内容分かりやすくて良かったです!

    田島悠介

    ゆかりちゃんも分からないことがあったら質問してね!

    大石ゆかり

    分かりました。ありがとうございます!

    TechAcademyでは、初心者でもJavaやServletの技術を使ってWebアプリケーション開発を習得できるオンラインブートキャンプJava講座を開催しています。

    挫折しない学習方法を知れる説明動画や、現役エンジニアとのビデオ通話とチャットサポート、学習用カリキュラムを体験できる無料体験も実施しているので、ぜひ参加してみてください。