Java 逆引き集 | アサーション(assert) — デバッグ補助

Java Java
スポンサーリンク

アサーション(assert) — デバッグ補助

Javaの アサーション(assert) は「プログラムの前提条件が正しいか」を実行時にチェックする仕組みです。
バグを早期に発見するための補助機能であり、通常のエラーハンドリングとは違います。初心者向けに、基本から例題までかみ砕いて説明します。


基本の書き方

assert 条件式;
assert 条件式 : メッセージ;
Java
  • 条件式が true → 何も起きない。
  • 条件式が false → AssertionError がスローされる。
  • メッセージ: エラー時に表示される補足情報。

使用例

int x = getValue();
assert x >= 0 : "xは負であってはならない";
Java
  • 狙い: 「x は必ず 0以上」という前提をチェック。
  • 失敗時: AssertionError: xは負であってはならない が発生。

有効化と無効化

  • デフォルト: アサーションは無効(実行時に無視される)。
  • 有効化: 実行時に -ea オプションを付ける。 java -ea MyApp
  • 無効化: -da オプション。
  • ポイント: 本番環境では通常無効、開発やテスト時に有効にする。

例題で練習

例題1: 配列のインデックスチェック

int[] arr = {1, 2, 3};
int index = 2;
assert index >= 0 && index < arr.length : "インデックス範囲外";
System.out.println(arr[index]);
Java

👉 範囲外なら AssertionError。


例題2: メソッドの前提条件

int divide(int a, int b) {
    assert b != 0 : "bはゼロであってはならない";
    return a / b;
}
Java

👉 ゼロ除算を防ぐ前提チェック。


例題3: 状態遷移の確認

enum State { INIT, RUNNING, STOPPED }

State s = State.INIT;
assert s == State.INIT : "初期状態でなければならない";
s = State.RUNNING;
Java

👉 状態遷移の前提を保証。


テンプレート集

基本形

assert 条件;
Java

メッセージ付き

assert 条件 : "エラーメッセージ";
Java

メソッド前提条件

public void process(Data d) {
    assert d != null : "dはnullであってはならない";
    // 処理
}
Java

実務での注意点

  • 本番では無効: アサーションは「デバッグ補助」。本番での入力検証には使わない。
  • 例外処理と区別: ユーザー入力や外部データのチェックは if + 例外で行う。
  • 内部前提の保証: 「このメソッドは必ずこう呼ばれるはず」という内部ロジック確認に使う。
  • 軽量チェック: 複雑な処理ではなく、軽い前提条件に限定する。

まとめ

  • assert は「プログラムの前提条件」をチェックする仕組み。
  • 失敗すると AssertionError。
  • 開発・テスト時に有効化してバグを早期発見。
  • 本番では通常無効、入力検証には使わない。

👉 練習課題として「配列アクセス」「ゼロ除算」「状態遷移」を assert でチェックしてみると、アサーションの効果が体感できます。

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