2014年3月9日 星期日

Clean Code - Meaningful Names

在coding的過程中,

命名一直是大家常常討論的事情,

不論是package、class、jar、file、document、properties等等,

這邊分享一些書中提到的觀念,

我想寫程式的方式每個人都有自己的想法,

看到別人提出的論點可以多聽多看多了解,

覺得好的可以學起來用,

但不認同的也可以提出來討論,

畢竟這也不是聖經或是spec,

不會有人逼你一定要用,

在此將一些覺得不錯的條列如下:

1. 名符其實

每一段Code中的所有變數,應該要可以解答所有讀者的疑惑,

可以比較以下兩段程式碼,第二段會比第一段容易理解每個變數代表的涵義,

很常看到在宣告m這種變數後,再寫一段註解解釋m是什麼意思,

如果這樣的話,不如直接宣告為month更顯得淺顯易懂。
        int m;
        String str;
        List<Integer> list=null;
 
        int month;
        String memberName;
        List<Integer> memberList=null; 

2. 有意義的區別

不要使用會讓人搞不清楚的命名,例如Member和MemberInfo兩個類別,

直覺上看起來是一樣的,或是使用a、an、the這種名稱,

像account和theAccount,或Item和ItemObject。

3. 可被搜尋

當一個變數或常數在程式中很常用到,最好給一個容易被搜尋到的名稱來代替,

比較以下兩段程式碼,for迴圈中的數字,

當使用變數名稱取代後,會更好搜尋及了解涵義。
  int sum = 0;
  for (int i = 0; i < 10; i++) {
   sum += i * 2;
  }

  int total_item_count = 10;
  int item_exchange = 2;
  for (int i = 0; i < total_item_count; i++) {
   sum += i * item_exchange;
  }

4. 類別和方法的命名

類別的命名盡量使用名詞,例如Member、Account、Item等等,

方法的名稱則使用動詞,例如save、update、delete、add等等,

取出使用get,設定修改用set,判定或flag使用is。

5. 避免雙關語

有時候你會常常使用add這樣的名稱,

不論是增加、插入、附加等等,

但你可以考慮用add、insert、append等等的命名來區別這其中的差異,

可以幫助讀者更好理解。

沒有留言:

張貼留言