トップ 差分 一覧 ソース 検索 ヘルプ RSS ログイン

リファクタリング

[アルゴリズム]

リファクタリング

ソースコードをリファクタリングする時、アルゴリズムを変えずにコードを別のコードに翻訳する。そのルーチンをつらつらと書きたい。ソースコードを綺麗にするためのリファクタリングというよりも、ソースコードの複雑性を解きほぐして簡単にすることを目指す。

方針
  1. 不必要な記述を減らす
  2. 削除不可能なロジックに関しては、より複雑な論理を表現できるプログラム言語の記法/糖衣構文/概念にて書き換える

それにより、処理の内容は等価かつソースコードの見た目の複雑性を低減させる。

  • より複雑な論理で書き換えたならば難しくなってしまうのでは?
    • なんかそういうことを指摘されそうだ(頭の悪い質問だ)。例えば10ポイントの複雑性を持つ論理をソースコードにする場合、プログラム言語の構文がいくつかの論理を表現できるとする。その時、
      • 簡単な構文1ポイント×10個で表現 = 構文は10個
      • 難解な構文3ポイント×3個 + 1ポイント1個 = 構文は4個
    • 簡単な構文を使うほどソースコードの量が増えることがわかる
    • 上記のお話は、簡単な「Hello, World」の文章を出力するために、アセンブラならば30行、Perlならば1行で済むという比較から帰納的に理解できるはず。アセンブラの構文は複雑な論理を表現できないため、Perlよりも手数がかかってしまう。
  • ただし
    • 複雑な論理を表現できる構文、それを知っている人が必要になる。学習コストが高い。
    • 複雑な論理を表現できるということは、たとえるならばパズルのピースの面積は大きいが凸凹が多く、当てはめられる場面が少ないかもしれない。

  不必要な記述を減らす

  • if文複数はif/elseにしてスコープの数を減らす

  より複雑な論理で表現する

  • for文/while文をcollectionの処理に変換
  • パターンマッチを使用する

お名前: コメント: