My Photo

« 第39回将棋大賞発表 | Main | 日本語プロパティファイル »

April 07, 2012

Java復習(3)アサーション

アサーションは想定した条件を満たしているかをチェックするために使う。条件を満たさなかったときに AssertionError が発生する。
条件には以下のようなものがある。

  • 内部の不変条件
  • 制御フローの不変条件
  • 事前条件・事後条件・クラスの不変条件

シンタックスは以下。

assert <条件式>;
assert <条件式>: <詳細情報>;

条件式は条件を満たす場合にtrue、つまり実行時にありえない状況になったときに false になるようなブール式である。
2つ目の書式の詳細情報は、条件式が false になったときに java.lang.AssertionError のコンストラクタの引数となる。

次のコードは内部の不変条件の例。iは常に正であることが想定しており、i が負の場合はアサーションが失敗して AssertionError が発生する。

if (i % 3 == 0) {
  ...
} else if (i % 3 == 1) {
  ...
} else {
  assert i % 3 == 2 : i;
  ...
}

次のコードは内部の不変条件の例で。for文でreturn するものと想定しているので、for文を抜けたところにアサーションを置いている。

for (...) {
  if (...) {
    return;
  }
}
assert false; // Execution should never reach this point!

1.4ではコンパイル時にアサーションを有効にするにはjavacにオプション "-source 1.4" をつけなければならなかった。
5以降ではsourceオプションをつけなくてもアサーションは有効である。

実行時にアサーションを有効/無効にするには java に -ea/-da オプションを付ける。パッケージ名、クラス名を指定することで特定のパッケージ、クラスに対してアサーションを有効/無効にすることができる。

-ea[:<パッケージ名>...|:<クラス名>]
-enableassertions[:<パッケージ名>...|:<クラス名>]
    アサーションを有効にする。

-da[:<パッケージ名>...|:<クラス名>]
-disableassertions[:<パッケージ名>...|:<クラス名>]
    アサーションを無効にする。

サンプルコード
public class AssertionTest {

  public static void main(String args[]) {
    assert args != null && args.length != 0 : "no args";
  }
}

実行結果
C:\data\programs\java>javac AssertionTest.java

C:\data\programs\java>java AssertionTest

C:\data\programs\java>java -ea AssertionTest
Exception in thread "main" java.lang.AssertionError: no args
        at AssertionTest.main(AssertionTest.java:4)

C:\data\programs\java>java -ea AssertionTest aaa

C:\data\programs\java>

参考ページ:
アサーションを使用したプログラミング
Java 入門 | アサーション

« 第39回将棋大賞発表 | Main | 日本語プロパティファイル »

「Java」カテゴリの記事

Comments

Post a comment

(Not displayed with comment.)

TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/26461/54413429

Listed below are links to weblogs that reference Java復習(3)アサーション:

« 第39回将棋大賞発表 | Main | 日本語プロパティファイル »

April 2017
Sun Mon Tue Wed Thu Fri Sat
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30            
無料ブログはココログ

日本blog村

  • にほんブログ村 IT技術ブログへ
  • にほんブログ村 アニメブログへ
  • にほんブログ村 サッカーブログ アルビレックス新潟へ

好きな音楽家

メモ

XI-Prof