為了提高**的可讀性和可維護性,對變數、類、包、檔案等命名必須做到精確、易於理解、易於(利用現代ide)維護。
幾條簡單規則:
一旦發現更好的名稱,就可以替換掉原有的名稱。
變數、函式、類的名稱本身應該能夠回答大多數的問題,如為什麼存在、做什麼事、怎麼用。注釋說明的是細節問題,絕大多數時候我們並不看注釋。如果名稱需要注釋補充說明,就還不算名副其實。重構時可以嘗試將注釋要點(重要屬性、計量單位等)放入名稱當中。
體現本意的名稱更易於理解。
書中重構**的乙個例子:
public list<
int[
]>
getthem()
return list1;
}
評述:以上**存在幾個表意不明的問題:
由此,重構以上的**:
public list<
int[
]>
getflaggedcells()
return flaggedcells;
}
以上**還有可提高的地方:
public list
getflaggedcells()
return flaggedcells;
}
通過重新命名、包裝類、隱藏函式,借用新構造的名稱,我們就得到了以上可讀性更好的**。
程式設計師必須避免留下掩藏**本意的錯誤線索,避免與本意相悖的詞;
避免使用和專有名稱衝突的變數名以及字首;
避免使用變數型別命名,就算真的是這種型別,也要避免使用(暴露冗餘資訊給客戶端沒有好處);
避免使用區別極小的兩個名稱。很容易混淆;
避免單個使用「l」和「o」,容易和「1」和「0」混淆;
大部分情況光是新增字尾數字是不夠的,除非確實有現實意義;
為了區別不同的含義,命名應該有明顯的不同。另外,避免廢話。
list、table、variable之類的名字是廢話,或者會造成誤導。namestring的string是廢話,因為name一般而言都是string。要盡可能讓客戶端在單看名稱,沒有注釋的情況下找到所需要的東西。
除非像實現imp之類慣用的縮寫,避免使用縮寫。
避免使用單字母的名稱,使用ide進行搜尋時很難找。
一般越常用、使用範圍廣的變數名稱越長、越具體。生存週期段、使用範圍小的變數名稱越短、越抽象。像ijk之類的一般只用於迴圈;就算是區域性變數雖然短一些,也盡量用能搜得到的名稱。
避免使用字首,可以的話,將函式分解到不用使用字首來區分變數。
不應當讓讀者將名稱翻譯成熟知的名稱,容易造成概念混淆;
類名應當是名詞或者名詞短語,不應當是動詞。
類名可以作為其他變數的引用時的字首,因此可以為變數構成乙個語境;
方法名是乙個動詞或動詞短語。另外訪問器、修改器、斷言按照標準加上get、set、is字首
使用靜態工廠方法時,使用對引數有描述性的方法名,另外可以將原始構造器設定為private強制客戶端使用靜態工廠。
為每個抽象概念選擇乙個詞,並一以貫之。
另外避免使用雙關,add既可以表示新增也可以表示連線,add如果已經作為新增的表意詞,就要用另外的單詞表示連線用於區別;
大多數名稱不能夠自我說明,由此我們可以通過類名進行包裝來表示語境
實在不行,新增字首是最後一招;
不要新增沒用的語境;
cleanCode 1 有意義的命名
為什麼要有意義的命名 我們都曾經說過有朝一日再回頭清理那些糟糕的 然而最終總是棄之不顧。稍後等於永不,我們需要立即行動,寫優雅的 寫 的過程中,讀佔的比例很大,所以首先要讓 易讀。有意義命名的幾大規則 1 命名即其意 例 int dayssincecreation 2 做有意義的區分 例 由a1,a...
有意義的開始
今天真的是很值得紀念的一天,來深圳第一次過得這麼充實。原因很簡單有希望 有盼頭 第一次主動約mm出去玩 好像不是約會,是兩位兄弟幫忙約的,呵呵,再次感謝兩位好兄弟的幫助 值得紀念。一直比較膽小,尤其是現在這種處境,完全沒有什麼信心,自己真是太膽小了,總是想著兩位兄弟幫忙打頭陣,為自己鋪路,好像不大好...
有意義的編碼
現象描述 使用有意義的編碼作為一條記錄的id,甚至作為資料庫的主鍵存在,例如,乙個員工的編碼設定為0203004,其中02代表員工所在分公司,03代表員工所在部門,004代表員工進入到該部門的序號。原因分析 id的設定方式大概有以下幾種,一種是純粹的流水號,從1開始,每次加1,或者對其將以改進,將數...