IF文を極力減らすと見晴らしのいいプログラムになる | それゆけ西表島

IF文を極力減らすと見晴らしのいいプログラムになる

プログラムの中は分岐の塊である。入り口が1つしかないのに、いろいろなことをさせようとするため、当然のように枝分かれしていく。

ところがこの枝分かれというのがプログラマ泣かせで、たまにしか通らない部分があったりすると、そこにバグがあった場合に発見が遅れたり、バグが出ても再現しずらかったりする。

なので、ツールを利用して、自動的に全分岐を辿って、バグを発見したり、絶対到達しない分岐を発見したり、ということも場合によっては可能なのだが、どこでも利用できるわけではないし、やはり複雑な分岐になるとバグの温床になりやすい。

そもそも、分岐をいっぱい作っておいて、ツールを使って全部チェックするという考え方は穴掘って埋めるという感じでなんとなく無駄が多い。もう少しいい方法はないだろうか。

1つに、分岐を出来るだけ入り口に近い側に持っていって、後は一本道にするという方法である。フォークタイプというか、付け根のところで分かれた後は、最後まで他と交わらずに処理を行う方法をとることで、分岐処理は分岐処理として集中できるため、プログラムの管理も行いやすい。

もう1つ、デザインパターンのTemplate Methodパターンや、Strategyパターン等、振る舞いを切り替える仕組みと、最近話題のDependency Injection パターンを組み合わせることで、ある入力に対して使用するクラスが一意に決まるような作りにすることが可能だ。

どちらの場合にも、複雑に絡み合わないような設計にすることによって、テストの組み合わせが減るので工数削減につながる。流れが決まるということは、ドキュメントが書きやすいということでもある。

プログラムの流れをシンプルにすることで、保守性も拡張性も高めることができるだろう。IF文だけではなくて、クラスの継承も複雑さを生む原因になっているので、継承も出来るだけ排除して、よりシンプルな設計にするのが後々のためにもよいのではないだろうか。