【讀書筆記】重寫可讀代碼的藝術(shù)
一、代碼應該易于理解
這里提出一個概念-理解代碼時間,我們應該讓別人理解代碼的時間越短越好。
而不是所用的代碼越短越好。
1 變量名稱
避免使用temp/size/foo/get/stop這種意義不清晰或者表達意思不多的詞匯
循環(huán)中如果有意義,避免使用i/j,要用users/numbers這種有業(yè)務意義的詞
數(shù)值帶單位,比如秒還是毫秒都是時間,但是加上_ms或者_s就會一下子看出來不會處理出錯
作用域很小的時候名稱可以是短的
不需要進行首字母縮寫
2 命名技巧
min和max表示極限
first和last表示包含的范圍
begin和end表示包含/排除范圍
布爾值要求定義明確,比如 use_ssl = true
和期望表示一致
3 審美
相似的代碼應當看上去相似
必要時使用列對齊,增加空白
用段落隔開增加邏輯
作用
消除大量代碼重復
添加新代碼更簡單
閱讀變得更直白
4 注釋
寫注釋之后會提高理解代碼的速度,業(yè)務簡單邏輯復雜的也要寫注釋
注釋加入思考過程,供以后參考
關(guān)鍵字
todo 還沒處理
fixme 已知的無法運行代碼
hack 粗糙的解決問題方式
xxx 危險重要的問題
常量加上注釋
標記意料之中的疑問
提前聲明代碼的問題
全局、總結(jié)的注釋
聲明高層次含義,而不是明顯的細節(jié)
二、簡化循環(huán)和邏輯
1 條件語句中的參數(shù)順序
比較的值是不斷變化的,比較的表達式的值傾向于常量
優(yōu)先正邏輯,優(yōu)先簡單邏輯,優(yōu)先異常
三目運算符只處理最簡單的邏輯,默認使用if/else
避免使用do/while
從函數(shù)中提前返回return結(jié)果,通過提前return減少邏輯嵌套
2 拆分超長的表達式
引入做解釋的變量
使用總結(jié)變量
德摩根定理,取反之后顛倒邏輯,增加可讀性
短路邏輯會增加閱讀時間
3 變量的可讀性
減少沒有價值的臨時變量,減少中間結(jié)果
縮減作用域
操作變量的地方越多,越難確定他的值
三、重新組織代碼
工程學就是大問題拆成小問題再把這些問題的方案放回一起。把這條原則應用于代碼會使代碼更健壯并且更容易讀。
這也就是我們最基本的分而治之以及抽象的思想。
1 積極地發(fā)現(xiàn)并抽取不相關(guān)的子邏輯
關(guān)注更高層次的代碼
把一些解決了不相關(guān)的子問題的代碼,抽出到獨立的代碼中
子問題更容易被測試
創(chuàng)建大量通用代碼/工具類
簡化已有接口,按需重塑接口
把一般代碼和項目專有代碼分開
2 一次只做一件事
應該把代碼組織得一次只做一件事情。
整理碎片,切分小任務
2 想法變成代碼
清晰的自然語言描述邏輯,注意關(guān)鍵詞和短語,寫出匹配的代碼
如果你不能把問題說明白,那估計是缺少了什么東西或者定義
泰迪熊太難了~
3 少些代碼
最好讀的代碼就是沒有代碼。
質(zhì)疑和拆分需求,學會縮減需求
定期刪除沒用的代碼
重用庫
經(jīng)常熟悉標準庫的API,避免重復編寫基礎(chǔ)代碼
三、精選話題
1 測試與可讀性
測試具有可讀性,測試代碼可以當做非正式的文檔
對使用者隱去不重要的細節(jié),以便更重要的細節(jié)會更突出
讓錯誤信息更具可讀性
簡化輸入值。又簡單又能完成工作的測試值更好
給測試命名一般Test_開頭
參考資料
《編寫可讀代碼的藝術(shù)》
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔相應法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。