code review中一些小結, 還沒來得及加例子, 簡要記錄, 供參考html
一: 一切都與複雜度有關
二: 代碼應當易於理解python
對人:git
"好程序員」應當不遺餘力, 把程序寫得讓其餘程序員(以及之後的本身)容易理解.程序員
對代碼:github
- 代碼被閱讀的次數遠多於編寫和修改的次數
- E = mc2 (Error = more codes)
對項目:數據庫
公式: 可行性=(當前價值+將來價值)/(實現成本+維護成本). 即相比下降實現成本, 下降維護成本更加劇要後端
團隊成員遵照統一的風格, 保持風格的一致性, 減小理解難度數據結構
遵循基礎的編碼風格:框架
請仔細閱讀, 使用對應編輯器插件工具協助檢查編輯器
遵循 pep8 風格
利用pep8工具(編輯器相關插件)來解決這個問題, 在review以前處理. 以免在review過程當中出現此類問題.
遵循 Google Code Style / 中文版
不要吝嗇空行, 把相關的代碼行分組, 造成代碼塊. 聲明按塊組織起來, 而且把代碼分紅」段落」(按步驟/順序/邏輯結構分), 排版合理
註釋應該有很高的
價值
(傳遞信息/空間佔用)
不要使用尾註釋. 容易被整行拷貝/不容易被編輯修改/逐漸腐爛
x = 1 # bad comment # good comment x = 1
不須要的代碼, 維護到版本庫後(寫明commit info
), 而後刪除. 不要註釋起來
快速
推斷出來的事實寫註釋.(不要爲了註釋而註釋)把信息裝入名字中.(自說明)
type
和 dir
params/args
等, 沒有隱含任何信息bool
類型, 除非名字自己有True/False
的含義, 不然建議統一使用is_
前綴is_not_pass
for a in b
, 注意 a
和 b
的單複數區分compile
, 放入變量中.Enum
, 對可讀性提高很大提早返回
來消除) c.減小控制流變量import *
, 會出現各類突如其來
的變量名, 可能致使名字空間污染, 形成詭異問題dict
, 不要使用for key in d.keys()
, 直接使用for key in d
原則: 保持簡短, 易懂.(拆分超長表達式)
numbers[0]['obj'].name
not a and not b
to not (a or b)
u"中文"
魔數
, 使用常量/枚舉替代之if/else
順序: a. 先處理正邏輯而不是負邏輯. b. 先處理掉簡單的狀況, 還能保證if/else在同一個屏幕內均可見(不然到了else
須要回頭查) c.先處理有趣或可疑的邏輯return early
, 從函數中提早返回. 使用guard clause
來實現. 某些狀況返回後, 將沒必要要思考某個分支出口, 剩餘注意力集中在爲數很少的狀況. 另外一個好處是, 能有效減小代碼縮進.return early
來減小嵌套. 而循環中的減小嵌套方式, 可使用if condition: continue/break
來進行提前返回
.is
來斷定是不是None
, 而不是==
if...else
, 三目運算只有在最簡單的狀況下才使用if condition: return
則不須要else
if/else
的多層嵌套, 在某些狀況下, 判斷條件中恆真/恆假的狀況enumerate
而不是維護index
變量( enumerate
還能夠從1開始計數)break
), 不然不要使用for...else
.(增長理解成本)for _ in l: _.x
, 可讀性太差if...else...
嵌套層次, 可使用if condition: continue
異常日誌同註釋, 應該有很高的
價值
(傳遞信息/空間佔用)
try except
中, 只捕獲會出異常的代碼片斷. 注意粒度, 不要放入沒必要要的代碼logging
而不是print
打日誌)except Exception
捕獲全部異常.finally
語句中使用return進行返回, 有坑.有用
, 即足夠明確, 對問題排查有幫助.try...except
處理了, 調用方不須要再次處理函數不要太大, 嵌套不要太深
return
值不要使用0/1
來表明True/False
return
, 返回值要保持一致(個數/類型)return early
, 減小閱讀代碼時的邏輯堆積, 減小貫穿函數始終用於最終判斷return的變量數量. 超過3個就變得有些難以維護了, 閱讀過程當中肯定其值有困難dict
封裝來進行傳遞.isinstance
property
封裝這層處理, 同時處理異常狀況.import
順序: 標準庫/第三方庫/本項目, 之間使用空行隔開import
, 請使用from a import (b, c, d)
而不是\
來進行換行from A import *
軟件設計三大誤區: 1.編寫沒必要要的代碼 2.代碼難以修改 3.過度追求通用
print
語句領地
, 他人不敢修改/不敢大改, 容易形成代碼腐爛. 佔用空間且沒啥用.