プログラム言語によっては、2つの値しか取らない型があり、フラグを変数としたい場合は、その型を使う。例えば、C++ の bool や Java の boolean がそうである(※1)。
boolean flag = true;
flag = false;
といった感じだ。
言語に boolean のような2値の型がない場合は、整数型などで代用する。例えば、C言語がそうだ。この場合、変数に0か1(場合によっては、0か-1)のどちらかの値しか入れない、というルールを決める(※2)。
そして、この場合、その変数がフラグであることが分かるように、変数に flag という名前を付けるのである。
#define BOOL int
#define TRUE (1)
#define FALSE (0)
/* BOOL である flag には TRUE か FALSE しか代入しない */
BOOL flag = TRUE;
flag = FALSE;
このような習慣があるので、逆に変数名に flag という名前をつけるのであれば、2つの値しか入れないでほしいのである(※3)。
ソースを読んでいるときに、
int flag = OK;
...
flag = NG;
...
flag = ERROR;
とかいう記述が出てくると、あれ? と思う。これまでフラグだと思って読んでたのに、これ、フラグじゃないの? ということになってしまう。
心当たりのある方は、以後、気をつけていただきたい。
※1
boolean は「ブーリアン」と読む。たまに「ブーリーン」と読む人がいるが、間違い。
※2
言語に enum という考え方がある場合はそれを使う場合もある。
※3
実際には、「偽と真」は、「0とそれ以外」と定義されることが多い。しかし、それは値を判定をするときの話で、「真」の値を代入する場合は決められた値だけを入れるべきである。また、変数の各ビットをフラグとみなすような場合には、3つ以上の値を代入することになるが、そのような場合には、変数名を工夫をすべきだろう(例えば、「flags」と複数形にするとか)。
美しいCプログラミング見本帖―ポインタ手習い指南
posted with amazlet
on 06.04.01
柏原 正三
翔泳社 (2004/04)
売り上げランキング: 123,467
翔泳社 (2004/04)
売り上げランキング: 123,467
おすすめ度の平均: ![5](https://img-proxy.blog-video.jp/images?url=http%3A%2F%2Fimages-jp.amazon.com%2Fimages%2FG%2F09%2Fx-locale%2Fcommon%2Fcustomer-reviews%2Fstars-5-0.gif)
![5](https://img-proxy.blog-video.jp/images?url=http%3A%2F%2Fimages-jp.amazon.com%2Fimages%2FG%2F09%2Fx-locale%2Fcommon%2Fcustomer-reviews%2Fstars-5-0.gif)
![5](https://img-proxy.blog-video.jp/images?url=http%3A%2F%2Fimages-jp.amazon.com%2Fimages%2FG%2F09%2Fx-locale%2Fcommon%2Fcustomer-reviews%2Fstars-5-0.gif)
![5](https://img-proxy.blog-video.jp/images?url=http%3A%2F%2Fimages-jp.amazon.com%2Fimages%2FG%2F09%2Fx-locale%2Fcommon%2Fcustomer-reviews%2Fstars-5-0.gif)
Code Complete第2版〈上〉―完全なプログラミングを目指して
posted with amazlet
on 06.04.01
スティーブ マコネル Steve McConnell クイープ
日経BPソフトプレス (2005/03)
売り上げランキング: 4,432
日経BPソフトプレス (2005/03)
売り上げランキング: 4,432
おすすめ度の平均: ![4.8](https://img-proxy.blog-video.jp/images?url=http%3A%2F%2Fimages-jp.amazon.com%2Fimages%2FG%2F09%2Fx-locale%2Fcommon%2Fcustomer-reviews%2Fstars-4-5.gif)
![4.8](https://img-proxy.blog-video.jp/images?url=http%3A%2F%2Fimages-jp.amazon.com%2Fimages%2FG%2F09%2Fx-locale%2Fcommon%2Fcustomer-reviews%2Fstars-4-5.gif)
![5](https://img-proxy.blog-video.jp/images?url=http%3A%2F%2Fimages-jp.amazon.com%2Fimages%2FG%2F09%2Fx-locale%2Fcommon%2Fcustomer-reviews%2Fstars-5-0.gif)
![5](https://img-proxy.blog-video.jp/images?url=http%3A%2F%2Fimages-jp.amazon.com%2Fimages%2FG%2F09%2Fx-locale%2Fcommon%2Fcustomer-reviews%2Fstars-5-0.gif)
![5](https://img-proxy.blog-video.jp/images?url=http%3A%2F%2Fimages-jp.amazon.com%2Fimages%2FG%2F09%2Fx-locale%2Fcommon%2Fcustomer-reviews%2Fstars-5-0.gif)