我们都明白命名的重要性
如果对命名不断地关注
就需要考虑命名中的动词和名词
特别的情况是动词的人称和名词的数量
在NET Framework的Guideline中有专门一章讨论了命名规范包括大小写单词的选择等却没有涉及到人称和数量下面来讨论一下这两方面的内容
名词的数量
首先来看数量名词的单数和复数在语义上有着明显的不同为了提高可读性数量需要认真地考虑比如
属性(Property)SystemCollectionsGenericDictionary<TKey TValue>中的Keys和Count是好的例子字段与此类似 方法名中的名词在JS中我们熟悉的getElementById和getElementsByTagName
局部变量与属性相比我们更可能遭遇的是局部变量比如用变量来表示一个人的名字可以用string name; 如果是多个人的名字则可以用List<string> names
一般地单数表达的语义是?(或)复数表达的语义是*(或多个)关于名词的数量很容易理解相关的规则也容易遵循
动词的人称
下面再来考虑动词的人称在需要考虑命名的对象中包括命名空间类型各种类型成员只有方法是动词语义上表示一个行为关于它的人称来看一个NET Framework中的例子在SystemCollectionsGenericStack<T>中有一个Contains(T item)方法对于这样的代码
if (theStackContains())
{
// Do something
}
读起来像是if the stack contains 比较通顺是不是所有方法都要这样命名呢?没有另两个方法Clear()和Push(T item)就不是如此这个地方很让人困惑先写成代码看看
theStackPush()
theStackClear()
尝试像上面那样作为一个句子来读the stack push ; the stack clear语法上不对看起来也应该是第三人称这里我也不确定为何如此只能尝试来解释下考察多个集合类型和其它类型后发现所有使用第三人称的地方都是谓词函数除了上面的Contains(T item)还有DirectoryExists(string path)不知道这是不是其中的命名规则呢?
还要考虑注释
一定程度上注释也算是一种代码一种是XML文档注释在NET Framework中不管是对于类型还是类型成员都使用了第三人称这一点我们也可以遵循其它的普通注释应该也可以遵循这个规则