アサーション(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 でチェックしてみると、アサーションの効果が体感できます。
