讀《程式碼整潔之道》第二章隨筆 有意義的命名
阿新 • • 發佈:2021-07-05
讓人引起重視的程式碼,名副其實
有意義的命名
如果你在給變數、函式或類命名的時候非常隨意,如下:
1.1
int d; //elapsed time in days;消逝的時間 //又或者是 List list1 = ... List list2 = ...
當別人第一次看到此程式碼時並不知道它要幹什麼, 命名d ,並沒有體現出來任何意義。
修改為如下命名:
1.2
int elapsedTimeInDays; //一天中消逝的時間 int daysSinceCreation; //建立天數
提高程式碼的清晰度,而不至於像上面的程式碼一樣模糊。
有意義的區分
如下,字母o 與 0, 字母l 與 1。
1.3
int a = l; if(o == l) a = o1; else l = 01;
又或者,1.. 3...,如下
1.4
public static void copyChars(char a1[], char a2[]){ //TODO... }
重構1.4的程式碼,如果是JDK原始碼的話,它會這麼寫
1.5
public static void copyChars(char source[], char destination[]){ //TODO... }
資源-》目的地。
禁止用或者最好不用縮寫
其實有時候開發為了圖方便,或多或少都會縮寫的。但本書不建議這麼做。
舉例:
1.6
Date genymdhms; //生成時間戳 Date modymdhms; //修改時間戳
重構後
Date generationTimeStamp;
Date modificationTimeStamp;
禁止或者最好不要用字首字尾
用字首確實沒有什麼大的意義,因為程式設計師在讀命名時都是忽略字首或者字尾的。
類名命名的規則
類名和物件一般用名詞或者名詞短語命名。
方法名
一般用動詞或者動詞短語命名。
根據JavaBean的標準,在一個類中一般有三種動詞
- get
- set
- is
舉例
1.7
String name = employee.getName(); customer.setName("mike"); if(paycheck.isPosted)....
小結
本書所在意的命名長短不是命名的長度,而是它夠不夠乾淨利落。
再看一組對比
1.8
//列印猜測統計 private void printGuessStatistics(char candidate, int count){ String number; String verb; String pluralModifier; //修飾詞 if(count == 0){ number = "no"; verb = "are"; pluralModifier = "s"; }else if(count == 1){ .... }else { .... } String guessMessge = String.formate(....) print(guessMessage); }
在一個方法裡,變數貫徹始終。本書建議對其進行分解,重構如下
public Class GuessStatisticMessage { private String number; private String verb; private String pluralModifier; public String make(char candidate, int count){ createPluralDependetMessageParts(count); return String.format( "......" ) } public void createPluralDependetMessageParts(int count){ if(count == 0){ thereAreNoLetters(); }else if(count == 1){ thereOneLetters(); }else{ thereAreManyLetters(count); } } public void thereAreNoLetters(){ //TODO... } public void thereOneLetters(){ //TODO... } public void thereAreManyLetters(count){ //TODO... } }
剛開始會很疑惑,我直接if else 不行嗎? 一目瞭然。
但是看了重構後的程式碼會發現,它的步驟太緊湊了,而且分工明確! 函式變化從上到下,看的很舒服。