寫給所有程序員:起個好名字是成功的一半

做了多年的程序猿,你可能還沒意識到為文件,為變量,為函數起個好名字的重要,今天就來分享一點點個人的代碼筆記,希望能對你有點新的認識。


寫給所有程序員:起個好名字是成功的一半


1.沒意義的名字

例子:

int a = 1;

int b = 2;

int c = a + b;

System.out.println("c="+c);


這段代碼很簡單,輸出兩個數的和,但有個問題,你能看到c就知道是兩數和嗎?如果我們的代碼足夠多,當每次看到a,b,c的時候,我們都要嘗試用邏輯去解析這段代碼,這造成時間的大量浪費,因為這個名字除了區別不同變量外,沒有帶給我們任何有用的消息。

2.讓人誤解的名字

int apple = 1;

int banana = 2;

int orange = apple + banana;

System.out.println("orange ="+orange);


這段代碼包含著邏輯炸彈,因為名稱存在意義,我們往往會在意名稱的含義。第一眼看到以為是要輸出橘子的有關係,但發現竟然不是,然後又要從頭看起。apple是啥?banana是啥?他們兩個相加有什麼意義?如果這樣的代碼足夠多,我保證一定比a,b,c更讓人抓狂。

讓人誤解的名字往往讓人先想含義,發現不正確又要從頭看起。

3.數字命名

int a1 = 1;

int a2 = 2;

int a3 = 3;

int a4 = a1 + a2 ;

System.out.println("a4 ="+a4 );

數字命名導致我不得不去查看與之相關的名字。既然都以a開頭,又用編號區分,我打賭他們之間一定存在某些關係。不行,一定不能寫錯,我要看看它的幾個兄弟是什麼意思。。。每次看到這種代碼的時候我難免這樣想,不得不去看看它的“兄弟”是幹嘛的,甚至有的時候會應為粗心,而寫錯。比如上面的a4 = a1+a2;

我寫成a1+a3,這真的很難一眼看出來。

數字命名導致閱讀者要查看兄弟名稱,容易書寫錯誤且不容易檢查。

4.大家來找茬

int naturalFirstNum = 1;

int naturalSecondNum = 2;

int naturalSumNum = naturalFirstNum + naturalSecondNum;

System.out.println("naturalSumNum ="+naturalSumNum );


如果有相似的名字,請把它們不同的部分寫在開頭,其次是結尾,不要把這部分放在中間,這會增大錯誤率,容易書寫錯誤且不容易檢查。

看到上面三個數的不同之處了嗎?它們開頭結尾都相同,但是中間不同,這樣真的很容易弄錯,如果你不得不這樣寫,請將naturalFirstNum 改為firstNaturalNum,naturalSecondNum改為secondNaturalNum 同理修改naturalSumNum;如果命名規則要求固定開頭(類似btnServiceCommit,前面幾個字母表示控件),那就讓它們的結尾不同naturalNumFirst.


寫給所有程序員:起個好名字是成功的一半


5.不要加和類型相同的名字,這會給你的查找替換工作加大難度

List list = new ArrayList<>();

這個名字有兩個槽點:1.你搜索list的時候會把List也搜索出來,如果我全局替換名稱,會造成大面積的錯誤,因為我把List也替換了。2.沒意義,因為一旦我賦值錯誤了,強類型語言IDE會提醒,看到這個名字我也不知道它的作用是什麼。

這種情況通常發生在自定義的類,比如:

Apple apple = new Apple();

聰明的程序員往往會這樣寫:

Apple mApple = new Apple();

mApple比apple這個名字好,因為它讓IDE的查找替換工作更加容易

好的名字

int firstNum = 1;

int secondNum = 2;

int sumNum = firstNum + secondNum;

System.out.println("sumNum ="+sumNum );

注意到了嗎?我用firstNum來代替num1,這樣識別度會增強,firstNum和secondNum不像num1和num2這樣容易弄錯。因為是變量名所以採用名詞,不要寫成動詞firstAdd,這容易讓人眩暈,1+?這是什麼?用動詞不能完整的表達變量名的意思。

同樣的,函數名(方法名)要使用動詞+名詞。

public static void main(String []args){

int firstNum = 1;

int secondNum = 2;

System.out.println("sumNum ="+addTwoNums(firstNum,secondNum ));

}

public static int addTwoNums(int firstNum,int secondNum){

return firstNum + secondNum;

}

上面的名稱:addTwoNums就是動詞+名詞格式,不用看代碼單獨看名字,就知道這個函數(方法)是求兩數和的,這就是這種命名方式的好處。單用動詞add,絕對不會馬上知道這個具體的工作。是添加到數據庫?添加到列表?還是求和?要有個識別的過程,這個過程,我稱之為浪費時間的過程。

特殊:按鈕或超鏈接類控件命名

雖然也算變量名,通常表示一個動作,如:

提交數據,比如修改手機號,比如登錄

所以使用動詞或動名詞形式:

btnCommit,btnModifyPhoneNumber


寫給所有程序員:起個好名字是成功的一半


分享到:


相關文章: