代码质量之命名(一)[部分看来的部分自己感悟]

来源:互联网 发布:云南大学软件学院导师 编辑:程序博客网 时间:2024/06/07 01:56

命名有两个原则:
1.清晰:你要知道该命名与什么有关
2.精确:你要知道该命名与什么无关
原则
1.命名中无需含有表示变量或参数类型的单词
对于集合来说,最好使用名词的复数形式来描述其内容,而不是使用名词的单数形式,如果开发者在乎集合中存储的内容,那么在命名应当反映这一点。

// 不好的List<DateTime> holidayDateList;Map<Employee, Role> employeeRoleHashMap;// 改进:List<DateTime> holidays;Map<Employee, Role> employeeRoles;这一点同样适用方法的命名。方法名不需要描述它的参数及参数的类型---参数列表已经说明了这些// 不好的:mergeTableCells(List<TableCell> cells)sortEventsUsingComparator(List<Event> events,Comparator<Event> comparator)// 改进:merge(List<TableCell> cells)sort(List<Event> events, Comparator<Event> comparator)

2.省略命名中不是用来消除歧义的单词
命名只是一个标识符:只是告诉你该变量是在哪定义的。并不是用来告诉阅读者所有他们想知道的有关这个对象的详细信息。这是定义应该做的事情。命名只是让你找到它的定义。
当我看到一个叫recentlyUpdatedAnnualSalesBid(最近更新的全年销售投标)的标识符时,我会问:
存在不是最近更新的全年销售投标么?
存在没有被更新的最近的全年销售投标么?
存在最近更新的非全年的销售投标么?
存在最近更新的全年非销售的投标么?
存在最近更新的全年销售非投标的东东吗?

// 不好的:finalBattleMostDangerousBossMonster;weaklingFirstEncounterMonster;// 改进:boss;firstMonster; 

3.省略命名中可以从上下文获取的单词
类中的方法/属性和方法中的变量,都是存在在上下文中的,无需重复。
// Bad:
class AnnualHolidaySale {
int _annualSaleRebate;
void promoteHolidaySale() { … }
}

// Better:class AnnualHolidaySale {int _rebate;void promote() { ... }}实际上,一个命名嵌套的层次越多, 它就有更多的相关的上下文,也就更简短。换句话说,一个变量的作用域越小,命名就越短。

4.省略命名中无任何含义的单词
在命名时可以问一下自己,把这个单词去掉含义是不是不变?如果是,那就果断把它剔除吧~~

注:
可读性
可维护性
简洁性 –不要让你的代码看上去毫无必要的复杂
效率性
明确性 –

好的代码本身就是最好的说明文档。
参考书籍:
1.代码大全2
2.重构与模式
3.代码整洁之道
4.编写可读代码的艺术
5.编写高质量代码:改善Java程序的151个建议
6.Effective Java(第二版)

1 0
原创粉丝点击