こんにちは、ヒーニョンです。
「プログラマ年収1000万円超えに向けて日々やるべきこと」で紹介した「リファクタリング」の書評です。
ジャンル | コーディング |
---|---|
評価 | |
読みやすさ | |
対象者 | 初級プログラマ |
ページ数 | 480ページ |
必要性
コーディングをするにあたって是非とも習得しておきたい技術の一つがリファクタリングです。リファクタリングとは、ソフトウェアの外部的振る舞いを保ったままで、内部の構造を改善していく作業を指します。
オブジェクト指向言語を上手く使ってリファクタリングを進める方法が書かれています。サンプルコードはJavaで書かれていますが、他のオブジェクト指向言語を理解しているのであらば読めます。
ちょっとネタバレ
構成
- リファクタリングー最初の例
- リファクタリングの原則
- コードの不吉な匂い
- テストの構築
- リファクタリング・カタログに向けて
- メソッドの構成
- オブジェクト間での特性の移動
- データの再編成
- 条件記述の単純化
- メソッド呼ぴ出しの単純化
- 継承の取り扱い
- 大きなリファクタリング
- リファクタリング、再利用、現実
- リファクタリングツール
- 部品から全体へ
リファクタリングの原則
リファクタリングは、あくまでもソフトウェアを理解しやすく、変更を容易にするために行う。これと対象的なのが、パフォーマンスの最適化です。パフォーマンスチューニングでは、コードは理解しにくくなるのが普通です。
コードの不吉な匂い
リファクタリングの「きっかけ」を匂いの比喩で表すアイデアです。次のコードが匂うコードです。
- 重複したコード
- 長すぎるメソッド
- 巨大なクラス
- 多すぎる引数
- 変更の発散
変更しなければならない時には、変更箇所を1つに特定して、そこだけを変えるようにしたい - 変更の分散
変更を行うたびに あちこちのクラスが少しずつ書き換わる - 属性、操作の横恋慕
自分のクラスよりも他のクラスに興味を持つ - データの群れ
数個のデータがグループとなって、クラスのフィールドやメソッドのシグニチャなど、さまざまな箇所に現われる - 基本データ型への執着
オブジェクト指向を始めたばかりの人は、小さなオブジェクトを使ってちょっとしたことをさせるのを嫌がる傾向があります - スイッチ文
コードのあちこちに同じようなスイッチ文が見られる。ポリモーフイズムが使えないかを検討してみる - パラレル継承
新たなサブクラスを定義するたびに、別の継承木にもサブクラスを定義しなければならない状況 - 怠け者クラス
リファクタリングの結果によって、以前はそれなりの働きをしていたクラスが、ダウンサイジングされて不要になる場合があります - 疑わしき一般化
いつかこの機能が必要になるさ - 一時的属性
インスタンス変数の値が、特定の状況でしか設定きれないオブジェクトに出会う - メッセージの連鎖
クライアントがあるオブジェクトにメッセージを送り、受け取ったオブジェクトがさらに別のオブジェクトにメッセージを送り、ぞれがまた別のオブジェクトへメッセージを送るといったメッセージの過剰な連鎖 - 仲介入
メソッ ドの大半が別のオブジェクトに委譲しているだけのクラスを見ることがあります - 不適切な関係
クラス同士の仲が良くなりすぎて、プライベートな部分を探り出すのに一生懸命 - クラスのインタフェース不一致
処理は同じでシグニチャのみが異なる - 未熟なクラスライブラリ
- データクラス
属性とgetおよびsetメソッド以外には何も持たないクラスに出会う - 相続拒否
サブクラスは親の属性と操作を継承するのが普通です。 しかし、かりにそれらが必要とされないとしたらどうなるでしょうか - コメント
コメントの必要性を感じたときにはリファクタリングを行って、コメントを書かなくとも内容がわかるコードを目指すこと
まとめ
第6章からリファクタリング・カタログです。 実際にコードをリファクタリングしていく状況を説明してあるので具体的で分かりやすく、参考になります。リファクタリングの技術は普段コーディングをしている随所で使えるテクニックですので早いうちに習得したいものです。
僕が読んだときはピアソン出版(下の写真)でした。ピアソンは僕が好きな技術書を多く出版しているのですが、どんどん撤退していて、寂しいです。新装版はオーム社がカバーしてくれて本当に助かります。良い本は残っていって欲しいです。
ではまたヾ(^^へ)
コメント