編程需要看了這本書,表達的意思雖然可以get到,但翻譯讓我沒有一口氣看完,而是斷斷續(xù)續(xù)看的,記下了我認為重要的點,以后也會經(jīng)??催@篇來重構代碼。(來自筆者的小吐槽)
第1章 代碼應當易于理解
- 代碼的寫法應當使別人理解它所需的時間最小化
第一部分 表面層次的改進
第2章 把信息裝到名字里
- 使用專業(yè)的單詞
- 避免空泛的名字
- 使用具體的名字來更細致地描述事物
- 給變量名帶上重要的細節(jié)
- 為作用域大的名字采用更長的名字
- 有目的地使用大小寫、下劃線等
第3章 不會誤解的名字
- 避免使用多義性的單詞(如filter、length和limit)
- 定義一個值的上限或下限時,max_和min_是很好的前綴
- 對于包含的范圍,first和last是好的選擇
- 對于包含/排除范圍,begin和end是最好的選擇
第4章 審美
- 重新安排換行來保持一致和緊湊
- 如果多個代碼塊做相似的事情,嘗試讓它們有同樣的風格
- 把代碼按“列”對齊可以讓代碼更容易瀏覽
- 用空行來把大塊代碼分成邏輯上的“段落”
第5章 該寫什么樣的注釋
- 能從代碼本身中迅速推斷出的事實不需要注釋
- 在這些地方記錄下想法(指導性批注,代碼中的缺陷,常量為什么是這個值)
第二部分 簡化循環(huán)和邏輯
第7章 把控制流變得易讀
- 比較的左側值更傾向于不斷變化, 右側值更傾向于常量
- if/else語句先處理正確的/簡單的情況
- 不要使用do/while循環(huán)和goto
第8章 拆分超長的表達式
- 德摩根定理
- not(a or b or c) <=> (not a) and (not b) and (not c)
- not(a and b and c) <=> (not a) or (not b) or (not c)
第9章 變量與可讀性
- 減少“中間結果”變量
- 減少每個變量的作用域
- 只寫一次的變量最好
第三部分 重新組織代碼
第10章 抽取不相關的子問題
- 代碼庫常常有個專門的目錄來存放通用代碼(比如util)
第11章 一次只做一件事
- 一次只做一件事的流程
- 列出代碼所做的所有“任務”,“任務”可以小得如“確保這個對象有效”,或者含糊得如“遍歷樹中所有節(jié)點”
- 盡量把這件任務拆分到不同的函數(shù)中,或者至少是代碼中不同的段落中。
第12章 把想法變成代碼
- 用自然語言描述程序然后用這個描述來幫助你寫出更自然的代碼
第13章 少寫代碼
- 從項目中消除不必要的功能,不要過度設計
- 重新考慮需求,解決版本最簡單的問題,只要能完成工作就行
- 經(jīng)常性地通讀標準庫的整個API,保持對它們的熟悉程度
第四部分 精選話題
第14章 測試與可讀性
- 最好每個測試的輸入/輸出可以用一行代碼來描述
- 若測試失敗,錯誤消息應該能讓編寫代碼者容易跟蹤并修正這個bug