ゲームが作れるようになるまでがんばる日記

ゲーム制作のことを中心にゲームに関することを書いています

アサーションを使おう

プログラム中で「この変数はこうなっているはず」とか「ここにはこないはず」というような場所があったらアサーションを使う。本にはアサーションと書かれているが、私はアサートと言っていた。
たとえば、変数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文がなくなっても動作が変わらないようにしなくてはならない。


参考文献:『Java言語で学ぶリファクタリング入門』