《编写可读代码的艺术》---不会误解的名字

前面一篇我们讲了把信息塞到到名字中,现在本章关注命名另外一个陷阱:歧义

在命名的时候,扪心自问,这样的命名会引起歧义吗?

 1:避免容易引起歧义的单词

People.Filter("year<='2011'");

告诉我,你看到这个方法的时候,猜测的结果是筛选掉2011之前的数据,还是筛选出2011之前的数据?

2:使用min和max表示(包含)极限

比如下面的代码用来检测购物车的容量不能超过10个

int Const CART_CAPCITY_LIMIT=10;

if(CartItemlList.Count()>=CART_CAPCITY_LIMIT)
  Debug.Log("cart full")

你能一阵见血的看出代码问题出在哪了吗?
购物车商品在10个的时候,程序竟然提示已满!

int Const CART_MAX_ITEM=10;

if(CartItemlList.Count()>CART_MAX_ITEM)
  Debug.Log("cart full")

经过我们的改动,上面程序表达的意思是,购物车商品超过限制,就提示。不易产生歧义

一旦开发组里面形成了这种命名规范,排查类似隐藏的错误将会变得容易

3:使用fisrt和last来表示(包含)范围

 比如我们要统计年收入

 void SumDurationIncome(int startYear,int stopYear)

SumDurationIncome(2011,2013) 的统计涵盖2013年吗?可能你就要切回源码去看了。

那么这样呢?

void SumDurationIncome(int firstYear,int lastYear)

我们就能很明白了,从2011年到2013年,都纳入统计范围。

4:使用exclusive来描述(不包含)范围

英语里面,很难找到明确描述不包含的单词,所以,为了不发生歧义,我们使用exclusive来描述不包含的范围,比如

void SumDurationIncome(int firstYear,int exclusiveLastYear)

就很明确的表示,统计我的收入阶段,从制定年份开始,到截止年份之前

 5:让布尔值“名副其实”

比如下面的命名

bool readPassword = true;

我们猜测这个变量时干啥用的?

  1. 我们需要读密码(isNeedReadPassword)
  2. 我们已经读了密码(isPasswordBeenReaded)

为了能描述这个布尔值的创建意图,我们可能需要加上 is(是否)、can(能否)、has(拥有)、should(应该)等前缀,来明确语义

另外,避免使用反义名词

bool isDisableEncrypt = false;


上面的代码就是允许用户加密啊,为毛还得转个弯呢。。,下面是它的原意。。

bool isEnableEnctypt = true;

6:符合使用者的预期

在我们印象里面,属性大概是这样的

public int Salary
{
get;
set;
}


如果属性的实际情况是这样

Public int Salary
{
get{循环1000次,从中取出平均值,返回};
set;
}

在不知情的情况下,我们频繁调用这个Salary可能就掉坑里面去了。。
所以这时我们取名就要暗示:这个方法会很耗费性能,你使用的时候,最好弄个变量存储起来,不要频繁调用。

//计算薪水
int ComputeAVGSalary();
原文地址:https://www.cnblogs.com/kimmy/p/3669676.html