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] Javaプログラミングで挫折しない学習方法を動画で公開中

実際に書いてみよう

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

サンプルプログラム仕様

  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編) も参考にしてみてください。

     

    コラム

    コスパとタイパ、両方結果的に良くなる良くなる学び方とは?

    「スクールは高いし時間も縛られて効率が悪い」と考える方は多いと思います。
    もちろん、時間も費用もかかることは間違いありません。
    ただ 結果的に無駄な学びにお金も時間もかける方がリスクが高いという考えもあります。

    コスパ・タイパ最適化の参考として、 テックアカデミー卒業生がスクールを選んだ理由 をご紹介します。

    • ・困ったときに、質問や相談できる相手がいるため挫折しなかった
    • ・プロとして必要なスキルのみを深く学べたので無駄がなかった
    • ・副業案件の提供と納品までのサポートがあったので目的を達成できた

    安価・短期間で広く浅く学んでも意味がありません。 本当に自分の目的が達成できるか、それが重要です。
    自分にどのスキルや学び方が合っているか、どんな学習方法かなど、お気軽に 無料相談 に参加してみませんか?

    カウンセラー・現役のプロへ、何でも気軽に無料相談可能。 30分か60分お好きな時間が選べて、かつ3回まで すべて無料で ご利用できます。
    無理な勧誘は一切ない ので、お気軽にご参加ください。

    今なら相談した方限定の割引・参加特典付き! 無料相談はこちら

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

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

     

    大石ゆかり

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

    田島悠介

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

    大石ゆかり

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

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

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

    初心者・未経験でもできる。まずはテックアカデミーに相談しよう

    プログラミングを独学で学習していて、このように感じた経験はないでしょうか?

    • ・調べてもほしい情報が見つからない
    • ・独学のスキルが実際の業務で通用するのか不安
    • ・目標への学習プランがわからず、迷子になりそう

    テックアカデミーでは、このような 学習に不安を抱えている方へ、マンツーマンで相談できる機会を無料で提供 しています。
    30分間、オンラインでどんなことでも質問し放題です。

    「受けてよかった」と感じていただけるよう カウンセラーやエンジニア・デザイナー があなたの相談に真摯に向き合います。

    「自分に合っているか診断してほしい」
    「漠然としているが話を聞いてみたい」

    こんなささいな悩みでも大丈夫です。

    無理な勧誘は一切ありません ので、まずはお気軽にご参加ください。
    ※体験用のカリキュラムも無料で配布いたします。(1週間限定)

    今なら参加者限定の割引特典付き! 無料相談を予約する