プログラム中で「この変数はこうなっているはず」とか「ここにはこないはず」というような場所があったらアサーションを使う。本にはアサーションと書かれているが、私はアサートと言っていた。
たとえば、変数valueの値が正のはずというときは、Javaで次のように書く。
assert value > 0;
プログラムを実行して、もしvalueが正でない場合は、java.lang.AssertionErrorという例外がthrowされる。
ここにはこないはずというような場合は次のように書ける。
assert false: "Never reached";
falseの後ろの文字列部分はオプションで、例外が発生したときに表示される。
Java言語にはアサートが言語として組み込まれているとは知らなかった。
参考:Oracle Technology Network for Java Developers | Oracle Technology Network | Oracle
C言語の場合はヘッダファイルassert.hで定義されている。
#include <assert.h> assert( value > 0 );
アサートはデバッグ時には有効にして、リリース時には無効にすることになるので、アサートの条件式には変数の値が変更されるなどの影響のあるコードは書いてはならない。
// 書いてはいけないコード assert( value++ > 0 );
こうしてしまうと、デバッグ時とリリース時に動作が変わってしまう。assert文がなくなっても動作が変わらないようにしなくてはならない。