重構第二版勘誤
我對自己的書永遠可以準確預測的一件事,就是我會犯錯。以下是關於 重構第二版 我知道的錯誤。如果你發現我沒有列出的錯誤,請告訴我。錯誤會在後續印刷中修正。
第二版及後續印刷中的錯誤
第 xix 頁(致謝)
第一段,最後一句。「if we wasn't writing」應為「if he wasn't writing」
第 27 頁(第一個範例:拆分計算和格式化的階段)
此時我可以從 renderPlainText
移除 plays
參數,因為它現在未使用。然而,我在重構時忽略了這一點,因此它會繼續出現在後續內容中。
第 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 頁(將函式合併成轉換)
在動機的第二段,「Then, to examine the derivations, all I need do」應為「Then, to examine the derivations, all I need to do」
第 155 頁(拆分階段)
第二段,「It's a basic task is to take」應為「It's a basic task is to take」
第 210 頁(移動欄位)
在第二個程式碼範例中,如果我顯示執行「滑動陳述」後的程式碼狀態,則這一行 this._setDiscountRate(discountRate
) 應為建構函式的最後一行
第 214 頁(將陳述移動到函式中)
在程式碼範例中,函式 renderPerson
有參數 outStream
,但函式主體中未使用。這使得範例比應有的更令人困惑,可以安全地忽略。
第 219 頁(將陳述移動到呼叫者)
第二段的第二行。「cut last line from renderPerson
」應為「cut last line from emitPhotoData
」
第 224 頁(滑動陳述)
在程式碼範例中,函式 retreiveOrder
應拼寫為 retrieveOrder
第 248 頁(以查詢取代衍生變數)
第一段的最後一句「我確實提倡盡可能將可變資料的範圍減到最小」應為「我確實提倡盡可能將可變資料的範圍減到 最 小。」
第 253 頁(將參照變更為值)
在最後一個程式碼範例上方的行中,「加強建構函式以呼叫設定器」應為「加強建構函式以 設定這些欄位」
第 291 頁(引入特殊情況)
從底部數來第四行,「但如果我變更客戶類別」應為「但如果我變更 網站 類別」
第 360 頁(下推方法)
步驟「從不需要它的每個超類別中移除方法」應為「從不需要它的每個 子 類別中移除方法」
第 361 頁(下推欄位)
在草圖中,我將存取修飾詞弄反了。之前部分應為「受保護的字串配額」,之後部分應為「私有的字串配額」
第 364 頁(以子類別取代型別碼)
頁面中間。「員工子類別很簡單」應為「工程師 子類別很簡單」
第 371 頁(移除子類別)
從上方數來第四行。「在建立子類別時…」應為「在 移除 子類別時…」
第一次印刷的錯誤
第 xix 頁(致謝)
第一段,最後一句。「if we wasn't writing」應為「if he wasn't writing」
第 2 頁(第一個範例:起點):第一句:「想像一個戲劇演員公司」應為「假設一個戲劇演員公司」[在第二次印刷中修正]
第 27 頁(第一個範例:拆分計算和格式化的階段)
此時我可以從 renderPlainText
移除 plays
參數,因為它現在未使用。然而,我在重構時忽略了這一點,因此它會繼續出現在後續內容中。
第 32 頁(第一個範例:狀態:分為兩個檔案(和階段))
在程式碼中,這一行
function renderPlainText(data, plays)
應為
function renderPlainText(data)[在第二次印刷中修正]
第 39 頁(第一個範例:讓效能計算器多型):第一行,「createPerformanceData」應為「createStatementData」[在第二次印刷中修正]
第 43 頁(第一個範例:狀態:使用多型計算器建立資料):第二段:「createPerformanceData」應為「createStatementData」[在第二次印刷中修正]
第 54 頁(我該如何告訴我的經理?)
該頁最後一段,「I've certainly seen places were refactoring…」應為「I've certainly seen places where refactoring…
第 68 頁(原則:自動化重構):在「Brandt」一節的第二段應拼寫為「Brant」。(抱歉,約翰,我似乎對你的名字有持續性的盲點。) [在第二次印刷中修正]
第 81 頁(異味:中間人):第二段,「如果還有其他行為」之後的所有文字應刪除。[在第二次印刷中修正]
第 96 頁(建立測試:探測邊界)
在程式碼範例中,這一行
name: "no proudcers"
應為
name: "no producers"
第 127 頁(變更函式宣告)
在「簡單機制」區段的最後一段,「I want to rename the a changeAddress
」應為「I want to rename the a changeAddress
第 135 頁(封裝變數):倒數第 3 段。「現在,任何重新指派預設擁有者屬性的嘗試都會造成錯誤」應改為「現在,任何重新指派預設擁有者屬性的嘗試都會被忽略」[已於第 2 版更正]
第 142 頁(引入參數物件):最後一個程式碼範例上方。「調整它以傳入正確的日期範圍」應改為「調整它以傳入正確的溫度範圍」[已於第 2 版更正]
第 149 頁(將函式合併成轉換)
在動機的第二段,「Then, to examine the derivations, all I need do」應為「Then, to examine the derivations, all I need to do」
第 155 頁(拆分階段)
第二段,「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}
,如果我想炫耀我的反骨)。但無論我儲存什麼,我都想知道開始、結束和長度是什麼。
第 210 頁(移動欄位)
在第二個程式碼範例中,如果我顯示執行「滑動陳述」後的程式碼狀態,則這一行 this._setDiscountRate(discountRate
) 應為建構函式的最後一行
第 214 頁(將陳述移動到函式中)
在程式碼範例中,函式 renderPerson
有參數 outStream
,但函式主體中未使用。這使得範例比應有的更令人困惑,可以安全地忽略。
第 219 頁(將陳述移動到呼叫者)
第二段的第二行。「cut last line from renderPerson
」應為「cut last line from emitPhotoData
」
第 224 頁(滑動陳述)
在程式碼範例中,函式 retreiveOrder
應拼寫為 retrieveOrder
第 248 頁(以查詢取代衍生變數)
第一段的最後一句「我確實提倡盡可能將可變資料的範圍減到最小」應為「我確實提倡盡可能將可變資料的範圍減到 最 小。」
第 251 頁(用查詢取代衍生變數):最後一段,「不過,我傾向於保留 totalProductionAjustments...」應改為「不過,我傾向於保留calculatedProductionAccumulator...」[已於第 2 版更正]
第 253 頁(將參照變更為值)
在最後一個程式碼範例上方的行中,「加強建構函式以呼叫設定器」應為「加強建構函式以 設定這些欄位」
第 263 頁(合併條件式):在草圖中,以及第 265 頁頂端的程式碼範例。「isNotEligableForDisability」應為「isNotEligibleForDisability」。(我最初在第一版中犯了這個錯誤,在勘誤表中修正了它,但在撰寫第二版時又重新引入了它。) [已於第 2 版更正]
第 291 頁(引入特殊情況)
從底部數來第四行,「但如果我變更客戶類別」應為「但如果我變更 網站 類別」
第 295 頁(引入特殊情況):頂端段落,「我應該可以在全域 isPresent 函式上使用移除死程式碼」應改為「我應該可以在全域isUnknown 函式上使用移除死程式碼」[已於第 2 版更正]
第 360 頁(下推方法)
步驟「從不需要它的每個超類別中移除方法」應為「從不需要它的每個 子 類別中移除方法」
第 361 頁(下推欄位)
在草圖中,我將存取修飾詞弄反了。之前部分應為「受保護的字串配額」,之後部分應為「私有的字串配額」
第 364 頁(以子類別取代型別碼)
頁面中間。「員工子類別很簡單」應為「工程師 子類別很簡單」
第 371 頁(移除子類別)
從上方數來第四行。「在建立子類別時…」應為「在 移除 子類別時…」
第 405 頁(參考文獻):[gof] 參考的 ISBN 應為 0201633612 [已於第 2 版更正]
非常感謝 Jeff Xiong、Umang Bhatt、Gautier Hayoun、Congyu Lin、Dmytro Pavliuchenko、Linhao Li 李霖灏、Ty Lewis、Akira Hirasawa、Masao Tomono、Kiminobu Kodama、Christopher Wheeler、Ondrej Kvasnicka、David Stevenson、Vincent Petit、Jeff Bingaman、David Bausela 和 Ben Forshey 發現並告訴我這些錯誤