代码整洁之道第二章

有意义的命名

有意义命名的几个简单规则:
1.名副其实。
变量,函数或者类的名称可以答复所有的大问题,而不需要注解来补充命名名称。

int d; //消逝的时间,以天计算。

上面这句代码名称没有什么实际含义,无法表达时间消逝和按照天来计算。

int elapsedTimeInDay;
int daysSinceCreation;
int daysSinceModification;

以上的这段代码不需要注释却也可以让人很清楚明白的理解其含义。
通过了一个简单的例子解释了名副其实这句话想要表达什么,除了命名之外还需要有代码的简洁性等。
下面的例子我们就可以通过对代码就行修改,使得代码的简洁性有所提高,让代码变得更加明确。

public List<int[]> getFlaggedCells(){
	List<int[]> flaggedCells = new ArrayList<int[]>();
	for(int [] cell : gameBoard){
		if(cell[STATUS_VALUE] == FLAGGED){
			flaggedCells.add(cell);
		}
		return flaggedCells;
	}
}

改进后:
使用Cell类代替int数组,该类还包括一个名副其实的函数isFlagged(),从而将FLAFFED这个数据封装起来。

public List<int[]> getFlaggedCells(){
	List<Cell> flaggedCells = new ArrayList<Cell>();
	for(Cell cell : gameBoard){
		if(cell.isFlagged()){
			flaggedCells.add(cell);
		}
		return flaggedCells;
	}
}

只需要将名称简单的修改,就可以很清楚的知道程序的含义,同时避免了大量的注释。
2.避免误导
程序员必须避免留下掩藏代码本意的错误线索,应当避免使用与本意相悖的词。例如一些操作系统或者编程语言的专有名词。
误导性最可怕的例子莫过于使用小写的“l”和大写的字母"O作为变量名,尤其是在组合使用的时候,因为他们看起来实在是太像常量“1”和“0”了。
3.做有意义的区分
比如用数字系列命名a1,a2,a3,…aN这样的命名纯属误导。完全没有办法提供正确的信息,没有提供导向作者意图的线索。
还有一种就是意义混淆的废话,为什么这么说,比如你有一个Product类,还有一个ProductInfo类或者是ProductData类,他们的名称虽然不同,但是意思却没有区别,程序员在选择程序调用的时候,根本不知道调用哪个函数。
4.使用读的出来的名称
不要使用一堆名称的缩写,在读的时候也没法读,而且也没有办法理解其含义。
5.使用可搜索的名称
单字母命名和数字常量在大段的代码中很难搜索,应该尽可能的使用便于搜索的变量名。
名称的长短应与其作用域大小相对应。
6.避免使用编码
1.避免使用匈牙利语标记法,所谓匈牙利语标记法就是取单词首字母作为变量名,这种编码增加了修改变量,函数或者类名称或者类型的难度,同时也增加了代码阅读的难度。
2.避免使用成员前缀,显得多余。
3.接口和实现,不需要使用XXXImpl等这种标识,就直接使用XXX来命名。
7.避免思维映射
应该尽量使用明确的命名,而不是使用习惯上的i,j,k作为变量名来使用。要清楚明确才是王道。
8.类名
类名和对象名应该是名词或者各词短语。类名不应当是动词。
9.方法名
方法名应当是动词或动词短语。属性访问器,修改器和断言器应该根据其值命名。并依据Javabean标准加上get,set和is前缀。
还包括使用解决方案领域的名称使用源自所涉及问题领域的名称添加有意义的语境等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值