Skip to content
This repository was archived by the owner on Mar 20, 2023. It is now read-only.

Commit da1b602

Browse files
committed
refactoring
1 parent cf45a07 commit da1b602

File tree

1 file changed

+45
-0
lines changed

1 file changed

+45
-0
lines changed

books/refactoring.md

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -358,3 +358,48 @@ const main = () => {
358358
- ホットスポットを探し出し、集中的に最適化
359359
- この際、なるべく小さなステップを積み重ねるようにすること(コンパイル->テスト->計測)
360360
- 短期的にはパフォーマンス悪化があるかもしれないが、チューニング段階からは加速し、最終的には最短で目的を達成できる方法である
361+
362+
## コードの不吉な匂い
363+
364+
- リファクタを「いつ」始めるべきか?
365+
- 美意識といった曖昧な感覚ではなく匂いで判定しろ。以下、そのリスト
366+
367+
### 不可思議な名前
368+
369+
- 適切な名前付けは明快なコードにするために最も重要、だけど難しい
370+
- 良い名前付けができれば
371+
- コードがずっとシンプルになる
372+
- 将来の時間を大きく節約できる
373+
- 良い名前付けができないときは、問題を理解できていない兆候
374+
375+
### 重複したコード
376+
377+
- 似ているけど違う部分はないかという間違い探しを毎回やる羽目になる
378+
379+
### 長い関数
380+
381+
- 小さな関数の寿命は最も長い
382+
- 自己記述性、共有性、選択可能性が高いから
383+
- 関数の分割をすると読むときのオーバーヘッドが増えないか?
384+
- 関数名をわかりやすくして対処する
385+
- そうすれば中身を読まずに読み進められる
386+
- コードが何をするのかという「意図」を表す名前をつける
387+
- コードが長くなっても意図が明確になれば良し
388+
- やること
389+
- `関数の抽出 p112` (コレが 99%)
390+
- 以下を関数に抽出してわかりやすい名前をつけていく
391+
- 重複コードなど、まとめられる箇所
392+
- コメントがある部分(≒ わかりにくいコード)
393+
- 例え 1 行でも躊躇しない
394+
- パラメータや一時関数が多すぎる場合
395+
- `問い合わせによる一時変数の置き換え p185`
396+
- 引数が多すぎる場合
397+
- `パラメータオブジェクトの導入 p146`
398+
- `オブジェクトそのものの受け渡し p327`
399+
- それでも一時変数やパラメータが残る場合
400+
- `コマンドによる関数の置き換え p345`
401+
- 条件分岐やループには`条件記述の分解 p268`
402+
- 巨大な switch 文があるなら、分岐後の各処理を`関数の抽出 p112`
403+
- 同じような構造の swtch 文が複数あるなら、`ポリモーフィズムによる条件記述の置き換え p279`
404+
- ループ部分とループ内部を`関数の抽出`
405+
- 抽出した関数にうまく名前がつけられないときは、ループとは別のことをしているので`ループの分離 p236`

0 commit comments

Comments
 (0)