最近阿里巴巴的 Java 开发手册出了新版(可直接到 github alibaba-p3c 上获取相关资源哦),我就跟着这个事情说一下我对开发规范的理解吧。
提起开发规范,我印象中最深的就是读研究生期间,带个人大牛师兄某导对个人要求。当时是开发一款 B/S 的 3D 渲染引擎,其中 Web 部分由我负责,在大师兄在对我进行 code review 的过程当中,对我提出了“严厉”的批评(也一直很感谢他当时的严格要求),缘由不是别的,就是我开发的网页中有一部分是文字介绍,里面的标点符号是中英文混用,且代码也不规范,好比缩进不一致、该有的空格没有等等问题。就是从那个时候起,我对代码规范很是重视。这对后来本身写毕业论文等等方面也起到了良好的促进做用,由于导师对这块要求也相对严格。java
回到代码规范这件事情上,好的代码读起来真的是赏心悦目,固然本身也一直在追求写出好的代码。代码规范中的 code style 只是其中最简单的一种,上述提到的 Java 开发手册也对这部分作出了严格的说明,但实际上能作到的人也很少。按道理,这部分也是最容易作到的一种,由于有模板,直接遵照便可。记得有一部电视剧(叫啥来着?)讲的就是一堆情侣由于纠结究竟是用空格仍是 tab 键(或者是 Vim 和 Emacs)分手,哈哈这固然是一个笑话。不过在一个 team 里保持统一的代码风格仍是有必要的,毕竟你写的代码不是只有你一我的看,在不一样的终端,不一样的编辑器来说空格和 tab 可能显示效果都不同,也就影响了阅读体验。
(图 1. hackthon 团队合影)git
对于代码规范来说,我也但愿经过本身的努力去感染身边的人。好比以前在宜信的 hackthon,我就组队发起了一个叫 “code review advisor” 项目,实现的目的其实也很简单,就是让你们在预先统一的规范下编码,若是有违反规范的,直接以 Comment 形式告诉代码提交者须要修改。
(图 2. hackthon 项目截图)程序员
后来,我到了大疆,又要求 team 同窗严格遵照规范,而且使用了一些技术手段彻底规范你们提交的代码,对于违反相应规则的代码直接不让提交和打包,当时其实就是利用了 alibaba 对外开源的工具支持。不得不说,仍是很佩服阿里巴巴对社区作的相应贡献的。
如今,我在阿里,发现现实就是规范其实也是一个美好的愿景,由于各类历史等缘由,其实你们的代码并无按照预期的规范去执行和实施。这应该也是广泛的现状吧。就像在其中一次交流会上,孤尽大佬说的那样,美好愿景确定是须要的,实现她,是须要你们花时间和精力去推动的。
(图 3. 孤尽大佬签名版开发手册)github
上图是在那次交流会上,获得孤尽大佬签名版的开发手册(原谅我没文化,认不出)。下面我就以其中的一个例子来讲明一下规范的好处。算法
public class SimpleDateFormatTest { public static final SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); public static void main(String[] args) { Date now = new Date(); String printedDate = simpleDateFormat.format(now); System.out.println(printedDate); for (int i = 0; i < 10; i++) { new Thread(new Runnable() { @Override public void run() { try { Date date = simpleDateFormat.parse(printedDate); System.out.println(simpleDateFormat.format(date)); } catch (ParseException e) { e.printStackTrace(); } } }).start(); } } }
上面代码片断就是规范中提到的 SimpleDateFormat 使用场景中一个错误的示例,其实就是一个线程安全的问题,跑上面代码片断,预期输出应该是一个正确的字符串表达(例如 2020-04-25 15:41:34),实际过程有可能会抛异常(例如 java.lang.NumberFormatException),也可能会输出一些奇奇怪怪的时间(例如 0015-03-25 15:41:34),这其实都还好,由于毕竟要么异常了,要么“时间不正常”,最要命的是可能会输出一个正确格式的时间,只不过不是预期的,这种问题就相对很难排查了。
还有好比前面刚跨年的时候各个系统都爆出的时间跨年问题(yyyy 和 YYYY 的问题),在此手册中其实也都有说明。因此,其实相似的规范多多了解更好。
end安全
欢迎扫码关注
程序猿石头编辑器
往期推荐ide
由一次磁盘告警引起的血案工具
RSA算法及一种"旁门左道"的***方式编码
震惊! 阿里的程序员也不过如此,竟被一个简单的 SQL 查询难住
码农唐磊有收获 ? 请四连 : 默默点赞喜欢做者