代碼整潔之道

[美] 羅伯特·C. 馬丁(Robert C. Martin)

立即出貨

  • 代碼整潔之道-preview-1
  • 代碼整潔之道-preview-2
  • 代碼整潔之道-preview-3
  • 代碼整潔之道-preview-4
  • 代碼整潔之道-preview-5
  • 代碼整潔之道-preview-6
  • 代碼整潔之道-preview-7
  • 代碼整潔之道-preview-8
  • 代碼整潔之道-preview-9
  • 代碼整潔之道-preview-10
代碼整潔之道-preview-1

買這商品的人也買了...

相關主題

商品描述

軟件質量,不但依賴架構及項目管理,而且與代碼質量緊密相關。這一點,無論是敏捷開發流派還是傳統開發流派,都不得不承認。

本書提出一種觀點:代碼質量與其整潔度成正比。乾凈的代碼,既在質量上較為可靠,也為後期維護、升級奠定了良好基礎。作為編程領域的佼佼者,本書作者給出了一系列行之有效的整潔代碼操作實踐。這些實踐在本書中體現為一條條規則(或稱“啟示”),並輔以來自實際項目的正、反兩面的範例。只要遵循這些規則,就能編寫出乾凈的代碼,從而有效提升代碼質量。

本書閱讀對象為一切有志於改善代碼質量的程序員及技術經理。書中介紹的規則均來自作者多年的實踐經驗,涵蓋從命名到重構的多個編程方面,雖為一“家”之言,然誠有可資借鑒的價值。

作者簡介

作者簡介
Robert C. Martin,世界級軟件開發大師,設計模式和敏捷開發先驅,敏捷聯盟首任主席,C++ Report前主編,被後輩程序員尊稱為“Bob大叔”。20世紀70年代初成為職業程序員,後創辦Object Mentor公司並任總裁。Martin還是一名多產的作家,至今已發表數百篇文章、論文和博客文章。除本書外,還著有《代碼整潔之道:程序員的職業素養》《敏捷軟件開發:原則、模式和實踐》《UML:Java程序員指南》等。


譯者簡介
韓磊,互聯網產品與社區運營專家,技術書籍著譯者。曾任CSDN及《程序員》雜誌副總經理、總編輯,廣東二十一世紀傳媒新媒體事業部總經理等職。現任AR初創企業亮風颱廣州公司總經理。除本書外,還譯有《夢斷代碼》《C#編程風格》等書。與劉韌合著《網絡媒體教程》,與戴飛合譯《Beginning C# Objects中文版:概念到代碼》。
 

目錄大綱

 

第1章整潔代碼1
1.1要有代碼2
1.2糟糕的代碼2
1.3混亂的代價3
1.3.1華麗新設計4
1.3.2態度4
1.3.3謎題5
1.3.4整潔代碼的藝術5
1.3.5什麼是整潔代碼6
1.4思想流派10
1.5我們是作者11
1.6童子軍軍規12
1.7前傳與原則12
1.8小結13
1.9文獻13


第2章有意義的命名14
2.1介紹14
2.2名副其實15
2.3避免誤導16
2.4做有意義的區分17
2.5使用讀得出來的名稱18
2.6使用可搜索的名稱19
2.7避免使用編碼20
2.7.1匈牙利語標記法20
2.7.2成員前綴21
2.7.3接口和實現21
2.8避免思維映射21
2.9類名22
2.10方法名22
2.11別抖機靈22
2.12每個概念對應一個詞23
2.13別用雙關語23
2.14使用解決方案領域名稱24
2.15使用源自所涉問題領域的名稱24
2.16添加有意義的語境24
2.17不要添加沒用的語境26
2.18最後的話27


第3章函數28
3.1短小31
3.2只做一件事32
3.3每個函數一個抽象層級33
3.4 switch語句34
3.5使用具有描述性的名稱35
3.6函數參數36
3.6.1單參數函數的普遍形式37
3.6.2標識參數37
3.6.3雙參數函數38
3.6.4三參數函數38
3.6.5參數對象39
3.6.6參數列表39
3.6.7動詞與關鍵字39
3.7無副作用40
3.8分隔指令與詢問41
3.9使用異常替代返回錯誤碼42
3.9.1抽離try/catch代碼塊42
3.9.2錯誤處理就是一件事43
3.9.3 Error.java依賴磁鐵43
3.10別重複自己44
3.11結構化編程44
3.12如何寫出這樣的函數45
3.13小結45
3.14 SetupTeardownIncluder程序45
3.15文獻48


第4章註釋49
4.1註釋不能美化糟糕的代碼50
4.2用代碼來闡述51
4.3好註釋51
4.3.1法律信息51
4.3.2提供信息的註釋51
4.3.3對意圖的解釋52
4.3. 4闡釋53
4.3.5警示53
4.3.6 TODO註釋54
4.3.7放大55
4.3.8公共API中的Javadoc 55
4.4壞註釋55
4.4.1喃喃自語55
4.4.2多餘的註釋56
4.4.3誤導性註釋58
4.4.4循規式註釋59
4.4.5日誌式註釋59
4.4.6廢話註釋60
4.4.7可怕的廢話62
4.4.8能用函數或變量時就別用註釋62
4.4.9位置標記62
4.4.10括號後面的註釋63
4.4.11歸屬與署名63
4.4.12註釋掉的代碼64
4.4.13 HTML註釋64
4.4.14非本地信息65
4.4.15信息過多65
4.4.16不明顯的聯繫66
4.4.17函數頭66
4.4.18非公共代碼中的Javadoc 66
4.4.19範例66
4.5文獻70


第5章格式71
5.1格式的目的72
5.2垂直格式72
5.2.1向報紙學習73
5.2.2概念間垂直方向上的區隔73
5.2.3垂直方向上的靠近74
5.2.4垂直距離75
5.2.5垂直順序79
5.3橫向格式80
5.3.1水平方向上的區隔與靠近81
5.3.2水平對齊82
5.3.3縮進83
5.3.4空範圍84
5.4團隊規則85
5.5 “鮑勃大叔”的格式規則85


第6章對象和數據結構88
6.1數據抽象88
6.2數據、對象的反對稱性90
6.3得墨忒耳律92
6.3.1火車失事92
6.3.2混雜93
6.3.3隱藏結構93
6.4數據傳送對象94
6.5小結95
6.6文獻96


第7章錯誤處理97
7.1使用異常而非返回碼98
7.2先寫try-catch-finally語句99
7.3使用未檢異常100
7.4給出異常發生的環境說明101
7.5依調用者需要定義異常類101
7.6定義常規流程103
7.7別返回null值104
7.8別傳遞null值105
7.9小結106
7.10文獻106


第8章邊界107
8.1使用第三方代碼108
8.2瀏覽和學習邊界109
8.3學習log4j 110
8.4學習性測試的好處不只是免費112
8.5使用尚不存在的代碼112
8.6整潔的邊界113
8.7文獻114


第9章單元測試115
9.1 TDD三定律116
9.2保持測試整潔117
9.3整潔的測試118
9.3.1面向特定領域的測試語言120
9.3.2雙重標準121
9.4每個測試一個斷言123
9.5 FIRST 125
9.6小結125
9.7文獻126


第10章類127
10.1類的組織128
10.2類應該短小128
10.2.1單一權責原則130
10.2.2內聚131
10.2.3保持內聚性就會得到許多短小的類132
10.3為了修改而組織138
10.4文獻141


第11章系統142
11.1如何建造一個城市143
11.2將系統的構造與使用分開143
11.2.1分解main 144
11.2.2工廠145
11.2.3依賴注入145
11.3擴容146
11.4 Java代理149
11.5純Java AOP框架151
11.6 AspectJ的方面154
11.7測試驅動系統架構154
11.8優化決策155
11.9明智使用添加了可論證價值的標準155
11.10系統需要領域特定語言156
11.11小結156
11.12文獻156


第12章迭進158
12.1通過迭進設計達到整潔目的158
12.2簡單設計規則1:運行所有測試159
12.3簡單設計規則2~4:重構159
12.4不可重複160
12.5表達力162
12.6盡可能少的類和方法163
12.7小結163
12.8文獻163


第13章並發編程164
13.1為什麼要並發165
13.2挑戰166
13.3並發防禦原則167
13.3.1單一權責原則167
13.3.2推論:限制數據作用域167
13.3.3推論:使用數據副本168
13.3.4推論:線程應盡可能地獨立168
13.4了解Java庫168
13.5了解執行模型169
13.5.1生產者-消費者模型170
13.5.2讀者-作者模型170
13.5.3宴席哲學家170
13.6警惕同步方法之間的依賴170
13.7保持同步區域微小171
13.8很難編寫正確的關閉代碼171
13.9測試線程代碼172
13.9.1將偽失敗看作可能的線程問題172
13.9.2先使非線程代碼可工作172
13.9.3編寫可插拔的線程代碼173
13.9.4編寫可調整的線程代碼173
13.9.5運行多於處理器數量的線程173
13.9.6在不同平台上運行173
13.9.7裝置試錯代碼174
13.9.8硬編碼174
13.9.9自動化175
13.10小結176
13.11文獻176


第14章逐步改進177
14.1 Args的實現178
14.2 Args:草稿185
14.2.1所以我暫停了196
14.2.2漸進197
14.3字符串類型參數199
14.4小結236


第15章JUnit內幕237
15.1 JUnit框架238
15.2小結251


第16章重構SerialDate 252
16.1首先,讓它能工作253
16.2讓它做對255
16.3小結268
16.4文獻268


第17章味道與啟發269
17.1註釋270
17.2環境271
17.3函數271
17.4一般性問題272
17.5 Java 288
17.6名稱291
17.7測試295
17.8小結296
17.9文獻296


附錄A並發編程II 297


附錄B org.jfree.date.SerialDate 326


結束語388