CamelCase
CamelCase里的一切、类名称都以大写字母开始,而方法和字段的名称则不需要。
任何内容都不要放在有大括号的那一行。
字段以下划线开头:
_fieldname
变量名不以下划线开头:
variableName
方法:
public void methodName(String stringValue)
接口公开
公共方法在类的最上部,后面跟有受保护的方法,然后才是私有方法。将所有继承自抽象类或者实现结构的方法都靠前放置,这是一个好主意。
尽可能做到立即就能找到一个类,并马上可以感觉到其功能以及它如何实现该功能,而不需要滚屏。
方法和类的名称
让其名称能够说明其功能。注意,不同的开发人员对于什么样的方法可读有不同的看法,他们更喜欢从周围的类,甚至是方法里的参数看出其作用。对这一点还存在争议,但是从名字来判断一个方法的作用是肯定可行的,因此:
doIForAllX()
就不理想,但是:
setupAllTableRowItems()
就很好。
而:
createRows()
可能更好。
[getVarvscalculateVar, 直接的getter对方法]
[不要将查询与作业混在一起]
方法的抽象
方法里的代码的抽象程度应该与同一个方法里其他所有代码的相同。这样的话,事件的自然过程能够被弄清楚。例如:
public void initializeDataBase()
{
_connection = createConnection ();
setUpTable();.
For (inti=0;i<tableRows;i++)
SetUpTableRow(i);
}
你稍稍一瞥,不用费什么功夫就可以读懂它。我们在3Q的时候非常珍惜视力,所以把这段代码变成了几个清晰明了的步骤,就像下面这样:
public void initializeDataBase()
{
setUpConnection();
setUpTable();
setUpTableRow();
}
这就有可能:
1.感觉到事情进展得怎么样
2.很容易就浏览到我们希望找到的类的确切部分(如果我们对表格行的设置感兴趣,我们就按住Ctrl点击setUpTableRow())。
得墨忒尔法则(Law of Demeter,即最少知识法则)
类应该只能够访问那些可以直接从其字段或者变量访问到的方法。对送进来的对象或者类自行实例化的对象的参考也是如此。
一般情况下,不要这么做……
publicintcalculateRetirementFund()
{
return getClient().getRetirementDetails().getRetirementFund();
}
……而要这么做:
public void calculateRetirementFund (RetirementDetails details)
{
return details.getRetirementFund();
}
这有助于为类设定范围并减少不必要的方法调用和委派。
顺序选择迭代
一般可以将方法分为下面三种类型。一系列事件,一个接一个;对集合的搜索或过滤;以及对集合或者数组的迭代。
收集方法、向量创建、向量设置、向量功能(vector dosomething)
集合一次又一次地出现,每次都是同样的问题,主要同类型有关。如果在集合里有一个任意的运行库强制转换(casting),那么总有出现错误类型的机会,导致强制转换异常的出现。
让集合变成可以针对具体类型,这使得在编译的时候检查往集合里加入的内容成为可能,同时还让根据类型来适应自定义的集合方法变得更容易。
不要使用临时变量——用查询来替代临时变量
在有关重整的书上查找这个内容——“用查询来替代临时变量”,最好不要抱着临时变量不放,它会增加代码的复杂性,给阅读者带来困难,同时减少了对算法作进一步重整的可能性。