[ソフトウェア開発]
リファクタリング
ソースコードをリファクタリングする時、アルゴリズムを変えずにコードを別のコードに翻訳する。そのルーチンをつらつらと書きたい。ソースコードを綺麗にするためのリファクタリングというよりも、ソースコードの複雑性を解きほぐして簡単にすることを目指す。
- 方針
- 不必要な記述を減らす
- 削除不可能なロジックに関しては、より複雑な論理を表現できるプログラム言語の記法/糖衣構文/概念にて書き換える
それにより、処理の内容は等価かつソースコードの見た目の複雑性を低減させる。
- ソースコードの複雑性とは?
- より複雑な論理で書き換えたならば難しくなってしまうのでは?
- なんかそういうことを指摘されそうだ(頭の悪い質問だ)。例えば10ポイントの複雑性を持つ論理をソースコードにする場合、プログラム言語の構文がいくつかの論理を表現できるとする。その時、
- 簡単な構文1ポイント×10個で表現 = 構文は10個
- 難解な構文3ポイント×3個 + 1ポイント1個 = 構文は4個
- 簡単な構文を使うほどソースコードの量が増えることがわかる
- 上記のお話は、簡単な「Hello, World」の文章を出力するために、アセンブラならば30行、Perlならば1行で済むという比較から帰納的に理解できるはず。アセンブラの構文は複雑な論理を表現できないため、Perlよりも手数がかかってしまう。
- なんかそういうことを指摘されそうだ(頭の悪い質問だ)。例えば10ポイントの複雑性を持つ論理をソースコードにする場合、プログラム言語の構文がいくつかの論理を表現できるとする。その時、
- ただし
- 複雑な論理を表現できる構文、それを知っている人が必要になる。学習コストが高い。
- 複雑な論理を表現できるということは、たとえるならばパズルのピースの面積は大きいが凸凹が多く、当てはめられる場面が少ないかもしれない。
不必要な記述を減らす
- if文複数はif/elseにしてスコープの数を減らす
より複雑な論理で表現する
- for文/while文をcollectionの処理に変換
- パターンマッチを使用する