我們都明白命名的重要性
如果對命名不斷地關注
就需要考慮命名中的動詞和名詞
特別的情況是動詞的人稱和名詞的數量
在
NET Framework的Guideline中
有專門一章討論了命名規范
包括大小寫
單詞的選擇等
卻沒有涉及到人稱和數量
下面來討論一下這兩方面的內容
名詞的數量
首先來看數量
名詞的單數和復數在語義上有著明顯的不同
為了提高可讀性
數量需要認真地考慮
比如
屬性(Property)
System
Collections
Generic
Dictionary<TKey
TValue>中的Keys和Count是好的例子
字段與此類似
方法名中的名詞
在JS中我們熟悉的getElementById和getElementsByTagName
局部變量
與屬性相比
我們更可能遭遇的是局部變量
比如
用變量來表示一個人的名字
可以用string name; 如果是多個人的名字
則可以用List<string> names
一般地
單數表達的語義是?(
或
)
復數表達的語義是*(
或多個)
關於名詞的數量很容易理解
相關的規則也容易遵循
動詞的人稱
下面再來考慮動詞的人稱
在需要考慮命名的對象中
包括命名空間
類型
各種類型成員
只有方法是動詞
語義上表示一個行為
關於它的人稱
來看一個
NET Framework中的例子
在System
Collections
Generic
Stack<T>中
有一個Contains(T item)方法
對於這樣的代碼
if (theStack
Contains(
))
{
// Do something
}
讀起來像是
if the stack contains
比較通順
是不是所有方法都要這樣命名呢?沒有
另兩個方法Clear()和Push(T item)就不是如此
這個地方很讓人困惑
先寫成代碼看看
theStack
Push(
)
theStack
Clear()
嘗試像上面那樣作為一個句子來讀
the stack push
; the stack clear
語法上不對
看起來也應該是第三人稱
這裡我也不確定為何如此
只能嘗試來解釋下
考察多個集合類型和其它類型後發現
所有使用第三人稱的地方都是謂詞函數
除了上面的Contains(T item)
還有Directory
Exists(string path)
不知道這是不是其中的命名規則呢?
還要考慮注釋
一定程度上
注釋也算是一種代碼
一種是XML文檔注釋
在
NET Framework中
不管是對於類型還是類型成員
都使用了第三人稱
這一點我們也可以遵循
其它的普通注釋應該也可以遵循這個規則
From:http://tw.wingwit.com/Article/program/net/201311/13961.html