人とか機械とか

デジタルガジェットやコンピュータについてのブログです。

コーディングメモ

目的

ひとつの変数が「1か8か9のとき」みたいな評価(evaluate)をしたいことがある。その変数名が長いと、なんかソースが見づらくなる。変数名は1個だけ書くようにしたい。

手段1、マクロを使う
  #define isAorB(x,a,b) (x==a)||(x==b)
  #define isAandB(x,a,b) (x==a)&&(x==b)

これだと2つしか評価できない。まあ3個用、4個用・・と作っていけば良いっちゃいいが・・。また、C99だとマクロに可変個の引数が使えるので、それでどうにかなるかも?でもC99って変な方向に行ってるし互換性も低いのであまり使いたくない。

手段2、switchを使う

ちょっと見た目がデカくなるのがデメリット。整数値しか使えない。

手段3、短い名前のローカル変数を使う

まあこれでもいいかも。

手段4、関数を使う

これが最もスマートだと思う。

  if (anything(g_HogehogeData.m_NullnullData.ErrorCode, 5,
               ERROR_123456789,
               ERROR_123460789,
               ERROR_123056789,
               ERROR_123456709,
               ERROR_123456780 ) )
  {
      
  }

bool anything(int target, int num, ...) {
	int i;
	va_list list;
	bool result = false;
	va_start( list, target );
	for (i=0; i


C言語的にはこんな感じになるけども、もっと高級な言語であればジェネリクスを使うと便利だと思う。型に依存しないので。また、foreach文でもいいと思う。



もしドラ

  human jk;
  jk.sex = female;
  jk.age = 16;
  jk.club = baseball;
  
  book management;
  management.title  = "management"
  management.auther = "drucker"
  
  if (jk.read(management)) {
      // もしドラ
  }