WTF/min 是衡量代碼質量的惟一標準,Uncle Bob 在書中稱糟糕的代碼爲沼澤(wading),這隻突出了咱們是糟糕代碼的受害者。html
國內有一個更適合的詞彙:屎山,雖然不是很文雅可是更加客觀,程序員既是受害者也是加害者。前端
對於什麼是整潔的代碼,書中給出了大師們的總結:程序員
Bjarne Stroustrup:優雅且高效;直截了當;減小依賴;只作好一件事web
Grady booch:簡單直接算法
Dave thomas:可讀,可維護,單元測試express
Ron Jeffries:不要重複、單一職責,表達力(Expressiveness)編程
命名的藝術後端
下面是書中的一個示例代碼,展現了命名對代碼質量的提高:微信
# bad code
def getItem(theList):
ret = []
for x in theList:
if x[0] == 4:
ret.append(x)
return ret
# good code
def getFlaggedCell(gameBoard):
'''掃雷遊戲,flagged: 翻轉'''
flaggedCells = []
for cell in gameBoard:
if cell.IsFlagged():
flaggedCells.append(cell)
return flaggedCells
不要掛羊頭賣狗肉,不要覆蓋慣用縮略語!架構
代碼是寫給機器執行,也是給人閱讀的,因此概念必定要有區分度:
# bad
def copy(a_list, b_list):
pass
# good
def copy(source, destination):
pass
註釋
The proper use of comments is to compensate for our failure to express ourself in code.
書中給出了一個很是形象的例子來展現,用代碼來闡述,而非註釋:
bad
// check to see if the employee is eligible for full benefit
if ((employee.flags & HOURLY_FLAG) && (employee.age > 65))
good
if (employee.isEligibleForFullBenefits())
法務信息
對意圖的註釋,爲何要這麼作
警示
TODO 註釋
放大看似不合理之物的重要性
函數
好比書中的例子:
public class UserValidator {
private Cryptographer cryptographer;
public boolean checkPassword(String userName, String password) {
User user = UserGateway.findByName(userName);
if (user != User.NULL) {
String codedPhrase = user.getPhraseEncodedByPassword();
String phrase = cryptographer.decrypt(codedPhrase, password);
if ("Valid Password".equals(phrase)) {
Session.initialize();
return true;
}
}
return false;
}
}
好比咱們想把大象放進冰箱,應該是這個樣子的:
def pushElephantIntoRefrige():
openRefrige()
pushElephant()
closeRefrige()
某種程度看來,這個跟金字塔原理也很像:
測試
可讀性
可讀性
可讀性
對於測試的原則、準則以下:
沒有測試以前不要寫任何功能代碼
只編寫剛好可以體現一個失敗狀況的測試代碼
只編寫剛好能經過測試的功能代碼
快速(Fast)測試應該夠快,儘可能自動化。
獨立(Independent)測試應該應該獨立。不要相互依賴
可重複(Repeatable)測試應該在任何環境上都能重複經過。
自我驗證(Self-Validating)測試應該有 bool 輸出。不要經過查看日誌這種低效率方式來判斷測試是否經過。
及時(Timely)測試應該及時編寫,在其對應的生產代碼以前編寫。
做者:xybaby
出處:https://www.cnblogs.com/xybaby/p/11335829.html
文末彩蛋
編程·思惟·職場
歡迎掃碼關注
本文分享自微信公衆號 - 前端迷社區(gh_c8466b051727)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。