『リファクタリング』第2版 正誤表

私の著書に関して、常に正確に予測できることが一つあります。それは間違いを犯すということです。『リファクタリング』第2版 で判明している間違いを以下に示します。記載されていないものを見つけた場合は、お知らせください。誤りは後の印刷版で修正されています。

第2版以降の印刷における誤り

xixページ(謝辞)

最初の段落、最後の文。「if we wasn't writing」は「if he wasn't writing」とする。

27ページ(最初の例:計算とフォーマットのフェーズの分割)

この時点で、playsパラメータは未使用であるため、renderPlainTextから削除できます。しかし、リファクタリング中にそれを怠ったため、後続で表示され続けます。

54ページ(マネージャーに何を伝えるか?)

ページの最後の段落で、「I've certainly seen places were refactoring…」は「I've certainly seen places where refactoring…」とする。

96ページ(テストの構築:境界の調査)

コード例で以下の行

  name: "no proudcers"

は以下のようにする。

  name: "no producers"

127ページ(関数宣言の変更)

シンプルなメカニズムセクションの最後の段落で、「I want to rename the a changeAddress」は「I want to rename the a  changeAddress」とする。

149ページ(関数をトランスフォームに結合)

動機付けの第2段落で、「Then, to examine the derivations, all I need do」は「Then, to examine the derivations, all I need to do」とする。

155ページ(フェーズの分割)

第2段落で、「It's a basic task is to take」は「It's a basic task is to take」とする。

210ページ(フィールドの移動)

2番目のコード例では、ステートメントのスライドを実行した後のコードの状態を示している場合、this._setDiscountRate(discountRate)という行はコンストラクタの最後の行にする必要があります。

214ページ(ステートメントを関数に移動)

コード例では、関数renderPersonにはパラメータoutStreamがありますが、関数の本体では使用されていません。これは例を必要以上に分かりにくくしており、安全に無視できます。

219ページ(ステートメントを呼び出し元に移動)

2段落目の2行目。「cut last line from renderPerson」は「cut last line from emitPhotoData」とする。

224ページ(ステートメントのスライド)

コード例では、関数retreiveOrderretrieveOrderとスペルする必要があります。

248ページ(派生変数をクエリで置き換え)

最初の段落の最後の文で、「I do advocate minimizing the scope of mutable data at much as possible」は「I do advocate minimizing the scope of mutable data as much as possible.」とする。

253ページ(参照を値に変更)

最後のコードサンプルの上の行で、「enhance the constructor to call the setters」は「enhance the constructor to set these fields」とする。

291ページ(特別なケースの導入)

下から4行目、「But if I change the customer class」は「But if I change the site class」とする。

360ページ(メソッドの押し下げ)

「Remove the method from each superclass that doesn't need it」という手順は「Remove the method from each subclass that doesn't need it」とする。

361ページ(フィールドの押し下げ)

私のスケッチでは、アクセス修飾子が逆になっています。「before」の部分は「protected String quota」とし、「after」の部分は「private String quota」とします。

364ページ(タイプコードをサブクラスで置き換え)

ページの中央。「The employee subclass is simple」は「The engineer subclass is simple」とする。

371ページ(サブクラスの削除)

上から4行目。「When it comes to creating subclasses…」は「When it comes to removing subclasses…」とする。

第1版の誤り

xixページ(謝辞)

最初の段落、最後の文。「if we wasn't writing」は「if he wasn't writing」とする。

2ページ(最初の例:出発点):最初の文。「Image a company of theatrical players」は「Imagine a company of theatrical players」とする(第2版で修正済み)。

27ページ(最初の例:計算とフォーマットのフェーズの分割)

この時点で、playsパラメータは未使用であるため、renderPlainTextから削除できます。しかし、リファクタリング中にそれを怠ったため、後続で表示され続けます。

32ページ(最初の例:ステータス:2つのファイル(とフェーズ)に分割)

コードでは、以下の行

function renderPlainText(data, plays)

は以下のようにする。

function renderPlainText(data)
(第2版で修正済み)

39ページ(最初の例:パフォーマンス計算機をポリモーフィックにする):最初の行。「createPerformanceData」は「createStatementData」とする(第2版で修正済み)。

43ページ(最初の例:ステータス:ポリモーフィック計算機を使用してデータを作成):第2段落。「createPerformanceData」は「createStatementData」とする(第2版で修正済み)。

54ページ(マネージャーに何を伝えるか?)

ページの最後の段落で、「I've certainly seen places were refactoring…」は「I've certainly seen places where refactoring…」とする。

68ページ(原則:自動化されたリファクタリング):「Brandt」というスペルは「Brant」とするセクションの第2段落。(ジョン、申し訳ありません。あなたの名前については、どうも目が行き届いていないようです。)(第2版で修正済み)

81ページ(匂い:中間者):第2段落、「If there is additional behavior」以降のすべてのテキストを削除する。(第2版で修正済み)

96ページ(テストの構築:境界の調査)

コード例で以下の行

  name: "no proudcers"

は以下のようにする。

  name: "no producers"

127ページ(関数宣言の変更)

シンプルなメカニズムセクションの最後の段落で、「I want to rename the a changeAddress」は「I want to rename the a  changeAddress」とする。

135ページ(変数のカプセル化):下から3番目の段落。「Now, any attempt to reassign the properties of the default owner will cause an error」は「Now, any attempt to reassign the properties of the default owner will be ignored」とする(第2版で修正済み)。

142ページ(パラメータオブジェクトの導入):最後のコードサンプルの直上。「adjust it to pass in the correct date range」は「adjust it to pass in the correct temperature range」とする(第2版で修正済み)。

149ページ(関数をトランスフォームに結合)

動機付けの第2段落で、「Then, to examine the derivations, all I need do」は「Then, to examine the derivations, all I need to do」とする。

155ページ(フェーズの分割)

第2段落で、「It's a basic task is to take」は「It's a basic task is to take」とする。

158ページ(フェーズの分割):コードの5行目、discount: discountを強調表示する(第2版で修正済み)。

162ページ(レコードのカプセル化)

動機付けセクションの最初の段落は、どうやら地元のパブで一杯飲んでいる間に消えてしまったようです。以下のようにする必要があります。

レコード構造体は、プログラミング言語の一般的な機能です。これにより、関連するデータをまとめて直感的にグループ化し、ばらばらの塊ではなく、意味のあるデータ単位を渡すことができます。しかし、単純なレコード構造体には欠点があります。最も厄介なのは、レコードに保存されているものと計算された値を明確に分離しなければならないことです。整数を含む範囲という概念を考えてみましょう。これは{start: 1, end:5}または{start: 1, length:5}(あるいは、意図的に逆らいたい場合は{end: 5, length:5}でも)として保存できます。しかし、どのように保存しようと、開始、終了、長さを知りたいのです。

(第2版で修正済み)

210ページ(フィールドの移動)

2番目のコード例では、ステートメントのスライドを実行した後のコードの状態を示している場合、this._setDiscountRate(discountRate)という行はコンストラクタの最後の行にする必要があります。

214ページ(ステートメントを関数に移動)

コード例では、関数renderPersonにはパラメータoutStreamがありますが、関数の本体では使用されていません。これは例を必要以上に分かりにくくしており、安全に無視できます。

219ページ(ステートメントを呼び出し元に移動)

2段落目の2行目。「cut last line from renderPerson」は「cut last line from emitPhotoData」とする。

224ページ(ステートメントのスライド)

コード例では、関数retreiveOrderretrieveOrderとスペルする必要があります。

248ページ(派生変数をクエリで置き換え)

最初の段落の最後の文で、「I do advocate minimizing the scope of mutable data at much as possible」は「I do advocate minimizing the scope of mutable data as much as possible.」とする。

251ページ(派生変数をクエリで置き換え):最後の段落、「I'd be inclined, however, to leave totalProductionAjustments…」は「I'd be inclined, however, to leave calculatedProductionAccumulator…」とする(第2版で修正済み)。

253ページ(参照を値に変更)

最後のコードサンプルの上の行で、「enhance the constructor to call the setters」は「enhance the constructor to set these fields」とする。

263ページ(条件式の統合):265ページ上部のスケッチとコード例。「isNotEligableForDisability」は「isNotEligibleForDisability」とする。(私は最初に第1版でこの間違いを犯し、正誤表で修正しましたが、第2版を作成したときに再び導入しました。)(第2版で修正済み)

291ページ(特別なケースの導入)

下から4行目、「But if I change the customer class」は「But if I change the site class」とする。

295ページ(特別なケースの導入):最初の段落、「I should be able to use Remove Dead Code on the global isPresent function」は「I should be able to use Remove Dead Code on the global isUnknown function」とする(第2版で修正済み)。

360ページ(メソッドの押し下げ)

「Remove the method from each superclass that doesn't need it」という手順は「Remove the method from each subclass that doesn't need it」とする。

361ページ(フィールドの押し下げ)

私のスケッチでは、アクセス修飾子が逆になっています。「before」の部分は「protected String quota」とし、「after」の部分は「private String quota」とします。

364ページ(タイプコードをサブクラスで置き換え)

ページの中央。「The employee subclass is simple」は「The engineer subclass is simple」とする。

371ページ(サブクラスの削除)

上から4行目。「When it comes to creating subclasses…」は「When it comes to removing subclasses…」とする。

405ページ(参考文献):[gof]参照のISBNは0201633612とする(第2版で修正済み)。


これらの誤りを見つけて教えてくれたJeff Xiong、Umang Bhatt、Gautier Hayoun、Congyu Lin、Dmytro Pavliuchenko、李霖灏 (Linhao Li)、Ty Lewis、平澤明 (Akira Hirasawa)、Tomo Masao、小玉公信 (Kiminobu Kodama)、Christopher Wheeler、Ondrej Kvasnicka、David Stevenson、Vincent Petit、Jeff Bingaman、David Bausela、Ben Forsheyの皆様に深く感謝いたします。