代码规范 任重而道远
1 代码规范化的意义
1.1软件维护是软件生命周期中持续时间最长的阶段。因此代码总会被很多人去维护,规范的代码可以减少维护人员的理解时间,降低维护代价,方便进行二次开发
1.2几乎没有任何一个软件,在其整个生命同期中,均由最初的开发人员来维护,所以作为最初的你最好留下好的口碑
1.3编码规范可以改善软件的可读性,可以让程序员尽快而彻底地理解新代码
1.4建议性的规范帮助编码人员写出易理解、易维护、易扩展的优秀代码
2 编码规范指南
2.1排版规范
2.1.1程序块采用缩进,缩进空位为4个
2.1.2分解符如“{”和“}”独占一行,并且位于同列
2.1.3较长的语句、表达式、参数要书写多行
2.1.4一行只写一条语句
2.1.5if,for,do,while,case,switch,default 独占一行,且语句块都要加“{ }”,无论语句多少
2.1.6相对独立的业务语句块之间,变量说明后加空行
2.1.7对齐只用空格不用TAB,避免不同编辑器对TAB处理不同
2.1.8对二个以上的关键字、变量、常量进行对等操作时,变量前后必须留空格,如果if( a == b)
2.1.9类属性和方法不用交叉放置,不同存取范围的属性或方法也不远交叉放置
2.2注释规范
2.2.1有代码的地方就有注释,杜绝没有任何注释的代码,推荐注释量在20%以上
2.2.2包的注释:在包的当前路径放入一名为package.html的HTML文件,方面JavaDoc收集。注释内容简述本包的作用、内容、产品模块、版本、版权等
2.2.3文件注释:文件开始,package 关键字前面,记载版权说明、描述信息、生成日期、修改历史
2.2.4类和接口的注释:在package之后,class或interface之前,描述当前类或接口的功能,作者,生成日期,修改日志,版本号等
2.2.5类属性、方法注释:在类或方法的前面,类属性记载属性的功能用处,用/* 开头描述注释,放置JavaDoc收集;
2.2.6类方法注释需要记载方法的功能简述、详细、输入参数、输出值、抛出的异常、作者等
2.2.7类方法内部注释: 注释应放置被注释语句的正上方或右侧; 注释必须与被注释的语句同缩进; 注释与上面的代码只有用一个空行隔开; 属于同一业务逻辑块的代码,须显示注释用途; 对于变量定义和分支语句(if, switch, case)必须注释; 写代码的同时写注释,修改代码的同时,也修改注释; 注释块内部请不要加缩进; 注释内容内部需要着重提示的,请包括标签<b>xxxx</b> 对于业务逻辑比较多的方法,建议显示注释步骤1、2,、3、4… 注释含义明确,不要写无意义的注释和难以理解的词汇
2.3命名规范
2.3.1包的命名:常用命名方式:com.公司名.产品线名.项目名.模块名,所有名称全部小写
2.3.2类名和接口名的命名:尽量使用完整的英文描述,首字母大写,每个英文单词的首字母大写,其余字母小写。抽象类请以Abstract开头,接口的实现类请以Impl接口,工具类请以Util或Utils结尾,如下列命名方式: StaffService、DefaultStaffService、AbstractEntity、StringUtils;
2.3.3、方法命名;尽量使用完整的英文描述,首字母小写,每个英文单词的首字母大写,其余字母小写,属性存取尽量使用setX、getX,返回布尔类型值的方法尽量使用isX,如下列命名方式: queryStaffById、isCodeExists()、getValue
2.3.4、属性命名;尽量使用完整的英文描述,首字母小写,每个英文单词的首字母大写,其余字母小写,属性名和方法名不要重复;
2.3.5、常量命名;使用全部大写的英文描述,每个单词之间用下划线分隔,变量之前近可能使用final修饰,注意:枚举也是一种常量;
2.3.6、模块内部的组件,尽量以组件名开头,如:StaffDAO、StaffService;
2.3.7、组件命名,尽量以组件类型结果,如:StaffService、OrgService;
2.3.8、准确控制类成员方法的修饰符,如果仅限于类内部使用用private修饰,可供子类或本包内部使用用protected修饰,对所有公开,则用public;
2.3.9、属性和方法的命名不易过长,一般不超过15个字母;
3 怎样写规范的代码
包结构清晰,类、接口、方法、属性命名贴切易懂;
该注释的地方注释,注释清楚、易懂,没有二义性;
接口定义明确,精确方法功能,每个方法只实现一个功能;
方法内部的代码行数控制在200行以内,一个类的代码行数控制在1000行以内,如果你的类代码在1000行以上,请重新思考设计思路,这里说的代码行数不把注释计算在内;
多个方法内部如果有相似的功能代码块,应该提取为公用方法;
尽量将业务相近的方法放在一起,便于寻找;
方法内部尽量不要catch异常,让外部调用者知道出错细节;
方法内部对于对象参数的调用,尽量判断非null引用,除非你的设计能保证非空对象;
不用的数据及时是否,如果数据库连接、集合、共享锁等;
不要使用技巧性比较高的表达式;
对于方法抛出的自定义异常,应该写明异常描述信息;
评估你的数据,对变量采用合理的类型,如一个整数在1个字节8位以内,应该使用byte;
该用基本数据类型就用基本数据类型,明确告诉虚拟机你的数据类型,避免虚拟机帮你做类型转换
红色标识 自己碰到过的需要改正的毛病
任重而道远!
附PSP
Job | Type | Data | Start | End | Total(min) |
效能 | 编码测试 | 3.13 | 14:30 | 15:20 | 50 |
效能随笔 | 随笔 |
3.14 3.15 |
14:20 10:40 |
14:51 10:50 |
41 |
了解燃尽、 甘特、鱼刺图 |
查阅 | 3.15 | 19:05 | 19:50 | 45 |
软件对比分析 | 随笔 | 3.16 | 13:50 | 14:35 | 45 |
小组工程需求讨论 | 讨论 | 3.16 | 17:50 | 19:50 | 120 |
代码规范 | 查阅 | 3.16 | 21:05 | 21:30 | 25 |
总结随笔 | 随笔 | 3.16 | 22:30 | 23 |
工作量表
代码行数 | 博客字数 | 知识点 | |
第二周 | 0 | 2500 |
代码规范 工程控制 需求分析 效能分析 |
写在最后
在这个课程中与“耐撕”一起完成抢答器项目,争取在实践中充分了解软件工程的过程。加油!