1700453156
编写高质量代码:改善Java程序的151个建议 建议144:提倡良好的代码风格
1700453157
1700453158
代码的版面和样式比较多,每个项目组基本上都有自己的编码规范,大家都希望形成良好的代码风格,以便提高代码的可读性,方便生成维护文档,减少缺陷出现的几率等,在Java的开发中一般都是按照《The Java Language Specification》(即《Java编码规范》)来制定编码规范的,但是基本上每个项目组都会有一些自己的个性特征,我们不去评说哪一个代码风格优秀,哪一个风格较差,而是来分析一下优秀团队的编码风格应该具有哪些特征。
1700453159
1700453160
(1)整洁
1700453161
1700453162
不管代码风格的定义有多优秀,有多适合开发人员,如果代码结构混乱不堪,即使效率再高,也会使维护难以持续。我们知道,代码首先是给人看的,然后才是给机器执行的,对于机器来说,只要代码符合规范,不在乎其格式是否整洁、是否有缩进、是否有回车,只要代码正确就能正常运行,而人就不同了,没有缩进没有回车的代码基本上是不可阅读的。试想一下一个没有标点符号的文档,整篇就是一个段落,能读懂的基本上是天才(或许你会说古代的诗词就是没有标点符号的。确实,但它有韵律)。
1700453163
1700453164
(2)统一
1700453165
1700453166
从一个团队中诞生的代码应该具有一致的风格,要使用下挂式括号就全部使用下挂式括号,要使用tab缩进就全部使用tab缩进,要使用小驼峰方式命名就全部使用小驼峰方式命名,不要带有个人色彩的风格标识。这样可以让我们的代码看起来很职业,而不是一帮乌合之众产生的“稻草”式代码。
1700453167
1700453168
统一的代码风格还要求具有连贯性,我们应该在不同的模块、层级中使用相同的编码风格,而不能在展现层使用一种编码,在逻辑层又使用另外一种编码风格。一个项目的编码风格不应该因为所处的功能区不同而有所差异。当然,若使用多种异构语言开发项目,则可以考虑为不同的语言提供不同的规范。
1700453169
1700453170
(3)流行
1700453171
1700453172
一种潮流风行世界的时候必然有其诞生的原因(感冒也包括在内),一种编码格式的流行也必然有它存在的理由,我们完全可以借鉴流行的编码格式,没有必要对这种风格进行重塑,而且使用流行风格可以让新成员尽快融入项目,避免出现进入一个新环境而出现茫茫无助的状态。
1700453173
1700453174
不要让您的代码规范标新立异,独树一帜,跟随“风尚”也许是一种省事、省力、省心的最好编码风格。
1700453175
1700453176
(4)便捷
1700453177
1700453178
制定出来的编码规范必须有通用开发工具支撑,不能制定出只能由个别开发工具支持的规范,甚至是绑定在某一个IDE上。在小范围内独乐乐,可以提升代码的友好度,方便使用,但很难大范围内推而广之,特别是很难上升到工程级别。代码风格是为一个团队准备的,如果团队中就只有一个开发人员,基本上代码风格不会有太大差异,这是习惯和个性使然,但是如果团队中有多个成员,就需要防止给开发人员过度的自由了,不符合开发规范的代码要坚决予以重构,以使团队代码风格一致。
1700453179
1700453180
现在的项目中源代码逐渐增多,完全依靠人工来做代码走查很难查出问题,我们可以使用工具来统计代码,这里推荐使用Checkstyle,它可以自定义代码模板,然后根据模板检查代码是否遵循规范,从而减少枯燥的代码走查。
1700453181
1700453182
1700453183
1700453184
1700453186
编写高质量代码:改善Java程序的151个建议 建议145:不要完全依靠单元测试来发现问题
1700453187
1700453188
单元测试的目的是保证各个独立分割的程序单元的正确性,虽然它能够发现程序中存在的问题(或缺陷,或错误),但是单元测试只是排查程序错误的一种方式,不能保证代码中的所有错误都能被单元测试挖掘出来,原因有以下四点。
1700453189
1700453190
(1)单元测试不可能测试所有的场景(路径)
1700453191
1700453192
单元测试必须测试的三种数据场景是:正常场景、边界场景、异常场景。一般情况下,如果这三种测试场景都能出现预期的结果,则认为代码正确,但问题是代码是人类思维的直观表达,要想完整地测试它就必须写出比生产代码多得多的测试代码,例如有这样一个类:
1700453193
1700453194
public class Foo{
1700453195
1700453196
//除法计算
1700453197
1700453198
public int divid(int a, int b){
1700453199
1700453200
return a/b;
1700453201
1700453202
}
1700453203
1700453204
}
[
上一页 ]
[ :1.700453155e+09 ]
[
下一页 ]