シリアライズ第10回〜switch case文を簡素にしたい part.2〜


目次に戻る


先週の続きです。
 
先週、case文の内容を関数化して呼び出すと良い。ということを紹介しました。
(先週の復習)case文の内容を関数化する
switch( flag ){
    case AAA:   AAAExecute(); break;
    case BBB:   BBBExecute(); break;
          :
          :
}
これでかなりプログラムはすっきりしたのですが、case文が100行、200行になってしまうと見苦しく感じる方もいると思います。そういう人にお勧めなのが関数のポインタを利用した条件分岐です。
関数のポインタを利用した条件分岐
/*
 * データ部
 */
void (*FunctionTable[])(void) = {
    AAAExecute,
    BBBExecute,
    CCCExecute,
       :
       :
};

/*
 * 関数実装部
 */
void AAAExecute( void )
{
   :
   :
}
void BBBExecute( void )
{
   :
   :
}

      :
      :
      :

/*
 * 条件分岐の部分
 *    switch( flag ){
 *       case AAA: AAAExecute();  break;
 *       case BBB: BBBExecute();  break;
 *             :
 *             :
 *   }
 * が以下の1行に収まる。
 */
FunctionTable[flag]();

関数ポインタを使った条件分岐の利点は、分岐内容というデータ部と分岐をするという処理部をプログラム上で分離できることです。こうすることでプログラム全体がすっきりします。欠点は処理の流れを追うことが難しくなる点です。これを使うか使わないかは個人の好みで決定して良いと思います。


目次に戻る