CODE COMPLETE 上 第7章 高品質なルーチーン 7.1ルーチーンを作成する理由
7.1ルーチーンを作成する理由
※ルーチーンとは1つの目的で実行される個々のメソッド、プロシージャのこと。
- 複雑さを低減する
- 中間部分をわかりやすく抽象化する
- コードの重複を避ける
- サブクラスを作成しやすくする
- 処理順序を隠蔽する
- ポインタ処理を隠蔽する
- 移植性を向上させる
- 複雑な論理評価を単純にする
- パフォーマンスの向上
- 全てのルーチーンが小さいことを保証する?
1 複雑さを低減する
ルーチーンを作成して内部を隠蔽してしまえば、詳細について考える必要は無くなる。
内部ルーチーンや条件の深いネストはルーチーンすべき兆候。
2 中間部分をわかりやすく抽象化する
コードの一部を分かりやすい名前のルーチーンにまとめると、その目的がうまく伝わる様になる。
if (node <> NULL) then
while (node.next <> NULL) do
node = node.next
leafName = node.name
end while
else
leafName = ""
end if
↓
leafName = GetLeafName(node)
こうすれば、関数名を見るだけで何をしているのかすぐ分かる。
3 コードの重複を避ける
ルーチーンの最も一般的な理由は、コードの重複を避けること。
重複を避ければ、その分スペースも圧縮できるし、コードの修正も1箇所だけすれば終わる。
4 サブクラスを作成しやすくなる
ルーチーンが十分に分解されていて短く保てていれば、十分に分解されていない長いコードをオーバーライドするより新たに書かなければならないコードは短くなる。
5 処理順序を隠蔽する
例えば、ユーザデータを取得するのと、ファイルからデータを取得することの順番を毎回明示する必要は無い。関数の中に隠蔽してしまう方がスッキリする。
6 ポインタ処理を隠蔽する
ポインタの処理は理解が難しくエラーの原因になりやすい。
ルーチーンにしてしまえば、ポインタへの扱いをルーチーンに任せてしまうことができる。
7 移植性を向上させる
移植性のない機能をまとめておくことで、いざ移植する際に取り組むべき範囲が明確になる。
8 複雑な論理評価を単純にする。
プログラムの流れを理解するのに複雑な論理評価を理解する必要は無い。関数として独立させると以下のメリットがある。
- 評価の詳細を関数内に移動できる。
- 評価の関数名で何をしてるのか明示できる。
9 パフォーマンスを向上させる
コードを複数の場所ではなく1箇所で最適化できる。効率の悪い部分を見つけるためのプロファイリングが容易になる。
10 全てのルーチーンが短いことを保証する?
そうとは言えない。これまでの理由があるのだから、それを理由にする必要は無い。
7.1.1 ルーチーンにするには単純すぎる?
2、3行のコードをルーチーンにするのは気が重いことがある。
でもルーチーンにしてしまえば、関数名で何をしてるのか一発で分かる。
また、もしコードの修正をする必要が出てきたら、一つのルーチーンの修正するだけで完了する。