if文の避けかた

if文を避けるために私が心がけている点をまとめました。

  1. 一番ヘビーな処理に照準を合わせる
    例えば図形の面積を計算するとき、もし3角形なら底辺×高さ÷2、直方体ならタテ×ヨコ、それ以上の多角形なら多角形を幾つかの3角形に分割し、全ての3角形の面積を合計する、と考えたとします。

    ところがこの多角形の方法は3角形でも4角形でも適用できるのです。なのでいつでもどんな時でも来た図形を多角形として処理するのです。上記のような条件分岐は不要です。簡単な図形の時には簡単な処理をした方が高速化できる、と思うかもしれませんが、そのような高速化は、「速く処理できる時はもっと速くできる」、といったもので、あまり意味がありません。高速化というのはヘビーなデータを処理する時にこそ意味があります。なので、処理は一番ヘビーな場合に一本化すべきだと思うのです。

  2. コンパイラに判断を肩代わりさせる
    ポリモーフィズムの事です。もしこの場合は・・・、というのはクラスを分けるべき所でもあります。違う処理が必要な場合は違う継承クラスにしておけば、分岐が必要な時はコンパイラが責任をもって分岐してくれます。そして矛盾があるときはコンパイルエラーとなって知らせてくれます。if文を間違えてプログラミングしてもエラーは出ず、バグとなって潜り込む事になります。ただあまり些細な違いでクラスを分けていくとクラスの数が多くなりすぎて、逆にメンテが辛くなってしまうので加減が必要なところですが。

なお、switch構文はif文のシンタックスシュガーでしかないので、switch文も避けなければなりません。まあ多重if文よりは見やすいのでマシですけど。

HOME > ガイドライン

Copyright(C) Since 2007 DeepDigital Co.,Ltd. All Rights Reserved.