« 使い方は? | トップページ | 気付けばぐだぐだに・・・ »

2008年9月25日 (木)新しい道

おはようございます。本日の当番、プログラマのT.Yです。

さて、直球ですが・・
みなさんは、プログラムを書いてて、とりあえず一つの関数で大丈夫だろう・・・
とか思いながら関数作って、その中に処理を書き始めたりしませんでしょうか?
少なくとも自分は結構そうなりがちです。。

そしてその関数はいつの間にか数百行の膨大な関数化してしまった状態で、とりあえずその場では完成したかのような挙動で動いてくれます。

これ、後から分けようと思ってても案外忘れてそのまま放置されたりしがちです。
この後何もなければ良いのです。 何もなければ。。。

ただ、実際の現場で開発してると、確実に何かが起こるのです。
追加、修正、バグ、マスク等々

作ったことすら忘れた頃に修正作業する事になったときに、改めてみる過去の自分のコード・・・ 自分で書いたコードでありながら、軽い殺意が芽生えます。。。

こうならないためにも、最初からある程度小分けに関数レベルで作って実装することをお勧めします


その中で、つい最近閃いて作った処理がこんな感じです。


void funcA()
{
処理A
}
void funcB()
{
処理B
}
void funcC()
{
処理C
}
void funcD()
{
処理D
}

FUNCPOINTER FuncTable[]=
{
funcA,
funcB,
funcC,
funcD,
NULL
};


void Operation( FUNCPOINTER *pFuncList )
{
while(pFuncList != NULL)
{
(*FUNCPOINTER(*pFuncList))();
++pFuncList;
}
}


void funcMain()
{
Operation(FuncTable);
}


因みに元の処理は・・

void funcMain()
{
処理A




処理B




処理C




(以下略)
}

下の場合だと、funcAの処理とCの処理を入れ替えようとか思ったときには、ある程度の行数を選択して、コピペとかになったりで、その時点でグチャグチャになったりとかなり扱いづらいです。

その点新たな実装方法の処理だと、FuncTableの順番を

FUNCPOINTER FuncTable[]=
{
funcC,
funcB,
funcA,
funcD,
NULL
};

このようにすれば簡単に入れ替え出来ます。

また新たに、処理追加が必要になった場合にも、(仮にfuncEとします)

FUNCPOINTER FuncTable[]=
{
funcA,
funcB,
funcC,
funcD,
funcE,
NULL
};

となるわけです。

なんにしても、短時間でサラッと作ったような構造なので、改善の余地は大量にあるような気もしますが、今のところはショボンとなってないので、ヨシとしてます。


まぁ、何にしても皆さんもいろいろ試してみてくださいということです。。。

そして、新たな試みとしては、最近、某バーチャル歌姫がウマウマなダンスをするベンチマークを見かけ、ここ最近仕事以外であまり個人的にプログラムする事もなかったので、新たにシェーダの勉強と、その他諸々・・・・
そして。
「オレもウマウマさせてみたいなぁ。。」
という欲望の中何か作ってみる予定ですが、それはまたいつの日か。。。。

follow us in feedly
result = encodeURIComponent( "http://www.accessgames-blog.com/blog/2008/09/post-d6e1.html" );document.write( "result = " , result );&media=https%3A%2F%2Ffarm8.staticflickr.com%2F7027%2F6851755809_df5b2051c9_z.jpg&description=Next%20stop%3A%20Pinterest">

| | コメント (0) | トラックバック (0)

« 使い方は? | トップページ | 気付けばぐだぐだに・・・ »

プログラマー」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック


この記事へのトラックバック一覧です: 新しい道:

« 使い方は? | トップページ | 気付けばぐだぐだに・・・ »