118

为什么阿里的程序员那么帅?---原来他们都有"编码规约扫描"神器在手 - 禁心...

 6 years ago
source link: http://www.cnblogs.com/1315925303zxz/p/7681275.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

为什么阿里的程序员那么帅?---原来他们都有"编码规约扫描"神器在手

       为了迎接十九大的到来,帝都城这几天也是满城风雨,听说早高峰期地铁站的人都排到天桥上了,哎,这就是该死的北漂生活。但是无论怎样,我依然在北京向各位问好!

       之前总结过俩篇关于阿里Java开发手册的编程规约(http://www.cnblogs.com/1315925303zxz/p/6934575.htmlhttp://www.cnblogs.com/1315925303zxz/p/6899728.html)的博客,我想说那近乎纸上谈兵,很多自律性比较差的同志坚持几天就又回归原点了,又是每天在SVN上自由发挥着自己狠个性的代码风格。不过没关系今天我督促你一把,我一直是一个对代码有洁癖的程序员,所以就比较喜欢这类东西的出现,也比较喜欢和各位总结分享,说不定哪天我去你们公司碰上你写的代码,恰好是我分享的编码规约,那岂不皆大欢喜。

       好了,不是废话的也说了这么多,想必大家都知道公元2017-10-15,阿里首发了Java开发规约插件,当时我在地铁上看的那叫一个兴奋,由于昨天有点忙,所以今天抽空给各位分享一下该插件的安装和使用,以及我们需要修行的代码风格。

阿里代码规约插件的安装:

       官方推荐IDEA使用编码规约插件jdk至少是1.7+,eclipse使用编码规约插件jdk至少是1.8+。但是本人使用的是Spring Tool Suite开发工具(spring的一个开发插件),jdk是1.7的,但是今天安装后能够正常使用,具体原因我也没有详细去查,但是结果是好的,再说一次能够正常使用。

       打开eclipse或者Spring Tool Suite工具,通过 Help 菜单>>选择 Install New Software,然后输入https://p3c.alibaba.com/plugin/eclipse/update 即可看到安装列表,然后安装即可,如果在安装过程中如果出现警告信息则可不比关心,跳过即可。

阿里代码规约插件的使用:

       如果你已经在你的开发工具中安装了阿里代码规约插件,你可以在某个类或者某个包上鼠标右键,就会看到【阿里编码规约扫描】神器了,抓紧试试,看看自己写的代码是有多丑。

855612-20171017125451256-1365081507.png
855612-20171017125812974-638944226.png

阿里编码规约扫描的结果总结:

       通过阿里代码规约插件的几通扫描,丑陋的代码原形毕露,我可是费了老半天才帮它们化好妆的。首先普及各位三个单词:blocker(雏形锻模,预锻模)、Critical(关键的; 批评的,爱挑剔的; 严重的; 极重要的)、Major(主要的; 重要的; 大调的)。这三个单词代表代码规约插件扫描出来的三类不规范的信息列表,具体的信息你自己去体验一把就知道了。

       当你右键执行>>阿里编码规约扫描时,就会在开发工具的通知栏中出现以下俩个选项卡P3C Results和Rule Detail,前者代表扫描出的不规范的错误列表,后者代表各个列表项不规范的详细情况,最主要的是举例教你如何改正,我喜欢。

855612-20171017132323365-659220025.png
855612-20171017132522693-1705939855.png

就我今天扫描出的不规范代码,有几点是值得注意的,特此记录一下:

1、Object的equals方法容易抛空指针异常,应使用常量或确定有值的对象来调用equals。

我的代码风格:

if (ip.equals("127.0.0.1") || ip.equals("0:0:0:0:0:0:0:1")) {

插件代码风格:

if ("127.0.0.1".equals(ip) || "0:0:0:0:0:0:0:1".equals(ip)) {

2、不允许任何魔法值(即未经定义的常量)直接出现在代码中。

我的代码风格:

if (currentMonth >= 1 && currentMonth <= 3) {

插件代码风格:

String KEY_PRE = "Id#taobao_1";
if(key.equals(KEY_PRE)){
//...
}

3、方法内部单行注释,在被注释语句上方另起一行,使用//注释。方法内部多行注释使用/* */注释。注意与代码对齐。 【注释这块我个人是非常重视的】

4、类、类属性、类方法的注释必须使用javadoc规范,使用/**内容*/格式,不得使用//xxx方式和/*xxx*/方式。说明:在IDE编辑窗口中,javadoc方式会提示相关注释,生成javadoc可以正确输出相应注释;在IDE中,工程调用方法时,不进入方法即可悬浮提示方法、参数、返回值的意义,提高阅读效率。

5、循环体内,字符串的联接方式,使用StringBuilder的append方法进行扩展。说明:反编译出的字节码文件显示每次循环都会new出一个StringBuilder对象,然后进行append操作,最后通过toString方法返回String对象,造成内存资源浪费。

反例:
String result;
for (String string : tagNameList) {
result = result + string;
}
正例:
StringBuilder stringBuilder = new StringBuilder();
for (String string : tagNameList) {
stringBuilder.append(string);
}
String result = stringBuilder.toString();

6、集合初始化时,指定集合初始值大小。HashMap使用如下构造方法进行初始化,如果暂时无法确定集合大小,那么指定默认值(16)即可。这块我个人的代码扫出了一大堆,以后真得防范了。

       到这儿可能就会有人站出来反对,功能实现了比啥都重要,至于浪费精力去关注代码的规范性嘛,那么我想送朋友一句话:谁会愿意通过一张邋遢的外表去发现内心一颗高尚的心。日常开发中也是一样,如果你写的代码再优再牛逼,你试试将一个项目中所有代码搞得长一行短一行格式乱七八糟,甚至连最基本的类、接口注释都不写,谁会愿意去发现你是一位牛逼的程序员。

  最后给那些插件开发的伙伴们付出的247个日夜点个赞,他们的确很棒,愿他们在以后的开发路上激情永在,薪水倍升!


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK