易讀代碼的藝術之Packing Information into Names 1

1、Packing information into names. ---- 把信息包含在命名中。

選擇非常特殊的詞,避免選擇詞義空洞的詞。例如,在GetPage()中的Get並不能充分表達page是從本地緩存、數據庫還是互聯網上得到,利用比較特殊的詞會避免這樣的情況,如FetchPage()、DownloadPage()。
再如:
class BinaryTree
{
     int Size();
     ...
};
Size()包含的信息並不明確,可以用比較特殊的詞來代替,如Height(),NumNodes(),或者MemoryBytes()。 

嘗試用色彩豐富的詞例如在PHP中的函數explode()是一個色彩豐富的詞。

2、It's better to be clear and precise than to be cute. ---- 使命名錶達的意思清晰準確要比矯揉造作的詞好。

拒絕使用像like、tmp和retval的通用名字。選取一個能描述實體值和目的的名字。通常我們用retval代表return value,但是這個詞並不包含很多信息,例如:
retval += v[i];
sum_squares += v[i];
比較,第二個表達式變量的命名更能包含明確地信息,這有助於我們在查bug時,快速定位。
建議:retval包含的信息不多,需要用能描述變量值得名字替代。

現在看下tmp的用法:
在下面的例子中:
if (right < left)
{
     tmp = right;
     right = left;
     left = tmp;
}
在這種情況下,tmp的使用是非常合適的,這個變量的唯一作用是臨時存儲,而且生命週期只有幾行,tmp傳遞了一個特殊的含義----這個變量再也沒有其他的義務了,所以這個變量也不會傳遞給其他函數,用作其他用途。
建議:tmp只能用在生命週期很短而且臨時性是這個變量最重要的要素時的情形。 

loop Iterators
i, j, iter名字通常用在指數參數和循環迭代因子上,如果將這幾個變量名字用在其他用途上,會使人感到困惑。當然在循環迭代因子的命名上會有比i, j, iter更好的名字,例如:
if (club[i].member[j] == user[k])用如下方式替換更好:
if (club[ci].member[mi] == user[ui])
建議:如果你打算用retval, tmp, i這樣的通用名字,給一個合理的理由吧。人們過度使用通用名字,都是出於懶惰。這很容易理解,當人們沒有想到好的名字時,使用沒有意義的名字很容易。但是如果你養成一個花額外的少量時間去想一個好名字,那麼你將會發現你會越來越快地起名字。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章