代码质量之命名(一)[部分看来的部分自己感悟]
来源:互联网 发布:云南大学软件学院导师 编辑:程序博客网 时间: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(第二版)
- 代码质量之命名(一)[部分看来的部分自己感悟]
- (读书笔记)代码整洁之道-命名部分
- 代码大全_第二部分: 创建高质量的代码
- 自己写的部分实用的代码
- 自己写的部分实用的代码
- ps如何选取自己想要的图片部分(一)
- FindBugs,第 1 部分: 提高代码质量
- 部分常用数据操作代码(一)
- git代码查询部分(一)
- Android 之 progressdialog的简单使用(部分代码)
- android的多点触摸(附自己的部分代码)
- 自己的php学习笔记(部分)
- 代码大全第二版读书笔记 第二部分-创建高质量的代码 七、高质量的子程序
- 代码大全第二版读书笔记 第二部分-创建高质量的代码 八、防御式编程
- wince下,修改private下的代码,如何进行快速编译,比如之编译自己修改部分的代码
- wince下,修改private下的代码,如何进行快速编译,比如之编译自己修改部分的代码
- 遗漏的代码部分
- 线程的部分代码
- extjs4多行选中
- 禁止堆对象
- Android中不能静态注册的广播
- Android N上语言列表
- 01-redis学习第一章
- 代码质量之命名(一)[部分看来的部分自己感悟]
- Http响应案例、Http响应编码问题、Servlet项目编码问题总结图
- 初学swift_002
- 记一次写Java项目启动管理脚本
- ROS进二阶学习笔记(2)- SMACH:用状态机来管理机器人任务
- Oracle数据库简单查询的流程
- 协同过滤算法笔记
- noip模拟11.16~11.17总结
- linux kernel总结