文章目录
第二章 有意义的命名
2.2名副其实
int d;//elapsed time in days
int elapsedTimeInDays;
如上述两个变量名所示,变量d就不是名副其实。
请观察下段代码,说明该段代码的目的
public List<int[]> getThem(){
List<int[]> list1=new ArrayList<int[]>();
for(int[] x:thelist)
if(x[0]==4)
list1.add(x);
return list1;
}
可以看出上面的代码存在如下问题:
1 theList 代表什么意思
2 theList零下标的意义是什么
3 值4 代表什么
4 该方法的作用是什么
将上面的代码修改之后得到,下段代码根据函数的命名和代码就可以轻松的看出该函数的作用。
public List<Cell> getFlaggedCells(){
List<Cell> flaggedCells=new ArrayList<Cell>();
for(Cell cell:gameBoard)
if(cell.isFlagged()){
flaggedCells.add(cell);
}
return flaggedCells;
}
class Cell{
int[] cell;
int STATUS_VALUE=0;
int FLAGGED=4;
public Cell(int[] cell) {
this.cell = cell;
}
public boolean isFlagged(){
return cell[STATUS_VALUE]==FLAGGED;
}
}
2.3 避免误导
1 hp、aix和sco都不应该用作变量名,因为他们是Unix平台或类Unix平台的专有名称
2 别用accountList来指一组账号,除非他真的是一个List类型。可以使用accountGroup或者bunchOfAccounts
3 提防使用外形相似度较高的名称
4 误导性真正可怕的例子是用小写字母l和大写字母O作为变量名
int l=1;
int O=0;
2.4 有意义的区分
1 不要妄想通过添加数字来区分不同的变量
2 不要做无意义的区分,比如“zork”和“theZork”,“name”和“nameString”,下面的三个方法,也并没有清楚的区分
getActiveAccount();
getActiveAccounts();
getActiveAccountInfo();
2.5 使用读得出来的名字
对比下面两段代码的命名方式
class DtaRcrd102{
private Date genymdhms;
private Date modymdhms;
}
class Customer{
private Date generationTimestamp;
private Date modificationTimestamp;
}
2.6 使用可搜索的名称
若变量或常量可能在代码中多处使用,则应赋予其便于搜索的名称,对于单字母名称和数字变量是很难在一大段代码中找到的
2.9类名
类名和对象名应该是名词或名词短语,而不应该是动词
2.10方法名
方法名应该是动词或者动词短语,如deletePage或save
属性访问器(accessor)、修改器(mutator)和预测(predicate)应该根据其值命名,并依据Javabean标准加上前缀get、set和is
2.14
记住只有程序员会读你的代码,所以使用解决方案领域的名称而不是依据问题所涉领域来命名
第三章 函数
3.1短小
函数的第一条规则就是要短小,20行封顶最佳
3.2 只做一件事
函数应该只做一件事