這是我第二次看這本書了(Clean Code)的時候,第一次看的時候是,看到某世界五百強在他們的代碼中我居然看不到一句註釋,如今我還記得當時的情景,當我Download 下第一份代碼的時候,我想在代碼中瞭解一下公司代碼編寫習慣以及少許的業務,在我之前的認知中,代碼中加上不少註釋這些註釋有助於我瞭解業務,可是在這份代碼中我居然看不到一行註釋,當時個人反應是,必定會有文檔的存在,我就向項目的負責人求助了,誰知他回了一句你多理解一下命名就好了,(其實個人英語很是差,後來慢慢習慣後才發現好的命名必定是有巨大的幫助的)。程序員
在《領域驅動》一書中有這樣的一個名詞 「通用語言」 他的主要目的是使用統一的語言給某一事物進行命名,在之後的溝通中能夠減小浪費時間與信息之間的偏差。從而減小溝通成本。函數
「通用語言「 在代碼中咱們能夠當作「命名規範「」,這是程序員與程序員之間,Code與code之間的溝通方式。code
在一份好的代碼中變量,函數,類的名稱已經能夠告訴咱們全部的大問題。若是你的代碼須要加上註釋才能告訴別人重要的問題,那我想您能夠考慮一下你的命名是否合理了。blog
固然代碼的命名也不是一成不變的,不如你的業務發生了改變,你的命名可能也須要發生改變,若是不進行改變會形成信息缺失的後果,最終將致使代碼難以維護。ip
下面用兩段代碼演示出上面的觀點開發
//用戶中篩選出用戶類型是Vip的用戶文檔
public List<string> getUsersName() get
{string
List<string> list = new List<string>();it
foreach (var item in UserList)
{
if (item.Type = "Vip")
list.Add(item.Name);
}
return list;
}
上面的代碼我也是曾經無數次的寫過,最終也是表達出了個人需求,可是如今有這樣一個要求,代碼中不要出現中文或者說需求須要改爲「查找用戶年齡大於100歲的用戶名稱」
這個時候大多數人的習慣是改動條件「item.Type = "100"」註釋有很大的可能被忽略這個時候新的開發人員接手了很容易產生誤導,由於他本能夠經過命名就不用再看這段代碼的,由於命名的不規範,致使了他必須跟蹤進來查看代碼,而且還形成了誤解。
說一下以上代碼中的錯誤:
getUsersName:不能見名識意
List<string> list :不能告知集合內容
UserList :命名錯誤由於這裏不適合使用List來講明這是一個集合,應使用Users 由於list 對於程序員來講具備很特殊的意義。除非 內容真是一個List 類型
item.Type :不知具體含義
return list; 不能告知我如何使用返回值
下面是正確的代碼示例:僅供參考 這裏user.Type = "VIP" 僅用於演示
public List<string> getVipUserNameByUserType()
{
List<string> vipUsersName = new List<string>();
foreach (var user in Users)
{
if (user.Type = "VIP")
vipUsersName.Add(user.Name);
}
return vipUsersName;
}
因此建議你們仍是看一遍cleanCode