为什么阿里的程序员那么帅?---原来他们都有"编码规约扫描"神器在手
为了迎接十九大的到来,帝都城这几天也是满城风雨,听说早高峰期地铁站的人都排到天桥上了,哎,这就是该死的北漂生活。但是无论怎样,我依然在北京向各位问好!
之前总结过俩篇关于阿里Java开发手册的编程规约(http://www.cnblogs.com/1315925303zxz/p/6934575.html、http://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 即可看到安装列表,然后安装即可,如果在安装过程中如果出现警告信息则可不比关心,跳过即可。
阿里代码规约插件的使用:
如果你已经在你的开发工具中安装了阿里代码规约插件,你可以在某个类或者某个包上鼠标右键,就会看到【阿里编码规约扫描】神器了,抓紧试试,看看自己写的代码是有多丑。
阿里编码规约扫描的结果总结:
通过阿里代码规约插件的几通扫描,丑陋的代码原形毕露,我可是费了老半天才帮它们化好妆的。首先普及各位三个单词:blocker(雏形锻模,预锻模)、Critical(关键的; 批评的,爱挑剔的; 严重的; 极重要的)、Major(主要的; 重要的; 大调的)。这三个单词代表代码规约插件扫描出来的三类不规范的信息列表,具体的信息你自己去体验一把就知道了。
当你右键执行>>阿里编码规约扫描时,就会在开发工具的通知栏中出现以下俩个选项卡P3C Results和Rule Detail,前者代表扫描出的不规范的错误列表,后者代表各个列表项不规范的详细情况,最主要的是举例教你如何改正,我喜欢。
就我今天扫描出的不规范代码,有几点是值得注意的,特此记录一下:
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个日夜点个赞,他们的确很棒,愿他们在以后的开发路上激情永在,薪水倍升!
为什么阿里的程序员那么帅?---原来他们都有"编码规约扫描"神器在手的更多相关文章
- 十面阿里 Java 程序员,最终拿下阿里 P6 offer!
转子:https://mp.weixin.qq.com/s/RkMxPbm8E99-rTZKmvBy6Q 今天介绍小编的一个朋友,他现今有四年开发经验了,前前后后为了进阿里面试十次(阿里旗下—蚂蚁金服 ...
- IOS-每个程序员的编程之路上都应该看这11本书
国外知名网站stackoverflow上有一个问题调查: 哪本书是对程序员最有影响.每个程序员都该阅读的书?,这个调查已历时两年,目前为止吸引了153,432人访问,读者共推荐出了478本书(还在增加 ...
- 【好程序员笔记分享】——URL解码与编码
-iOS培训,iOS学习-------型技术博客.期待与您交流!------------ 1.url编码 ios中http请求遇到汉字的时候,需要转化成UTF-8,用到的方法是: NSString * ...
- 程序员写了一个新手都写不出的低级bug,被骂惨了。
你知道的越多,你不知道的越多 点赞再看,养成习惯 本文 GitHub https://github.com/JavaFamily 已收录,有一线大厂面试点思维导图,也整理了很多我的文档,欢迎Star和 ...
- 蚂蚁上市员工人均一套大 House,阿里程序员身价和这匹配吗?
作者 | 硬核云顶宫 责编 | 伍杏玲 出品 | CSDN(ID:CSDNnews) 上周,蚂蚁集团迎来IPO,其发行价格将达到68.8元,总市值将突破2万亿元.市场对蚂蚁的成长性有着充分的信心,为了 ...
- 聊聊几个阿里 P8、P9 程序员的故事
大家好,我是对白. 阿里 P8 程序员年薪百万已经是公开的秘密了,有人关心他们年薪百万,而我更加关注阿里这些 P8.P9 程序员的成长故事,在聊这些大牛的故事之前,跟大家稍微简单聊下阿里技术人等级制度 ...
- 万能的林萧说:我来告诉你,一个草根程序员如何进入BAT。
引言 首先声明,不要再问LZ谁是林萧,林萧就是某著名程序员小说的主角名字. 写这篇文章的目的其实很简单,算是对之前LZ一篇文章的补充和完善. 之前LZ写过一篇<回答阿里社招面试如何准备,顺便谈谈 ...
- 嫁给程序员的好处,你get到了吗?
首先,我们要知道,什么是程序员?程序员是做什么的? "程序员(英文Programmer)是从事程序开发.维护的专业人员.一般将程序员分为程序设计人员和程序编码人员,但两者的界限并不非常清楚, ...
- 程序人生:02我来告诉你,一个草根程序员如何进入BAT
本文摘自左潇龙博客,原文出处:http://www.cnblogs.com/zuoxiaolong/p/life54.html 引言 首先声明,不要再问LZ谁是林萧,林萧就是某著名程序员小说的主角名字 ...
随机推荐
- JavaScript 的使用基础总结①
JavaScript 使用 JavaScript 是一种轻量级的编程语言,JavaScript 是可插入 HTML 页面的编程代码,JavaScript 插入 HTML 页面后,可由所有的现代浏览 ...
- 201521123084 《Java程序设计》第12周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. (1)Java中把不同类型的输入.输出抽象为流(Stream),而其中输入.输出的数据则称为数据流(Data ...
- 201521123090《Java程序设计》第6周学习总结
本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图,对面向对象思想进行一个总结. 注1:关键词与内容不求多,但概念之间的联系要清晰,内容覆盖面向对 ...
- Java 课程设计 "Give it up"小游戏(团队)
JAVA课程设计 "永不言弃"小游戏(From :Niverse) 通过Swing技术创建游戏的登陆注册界面,使用mySQL数据库技术完成用户的各项信息保存和游戏完成后的成绩保存. ...
- 201521123038 《Java程序设计》 第十三周学习总结
201521123038 <Java程序设计> 第十三周学习总结 1. 本周学习总结 端口:区分一台主机上的不同服务,不是物理接口 ipconfig:查看网络配置 ping:检查网络是否连 ...
- 201521123122 《java程序设计》第十四周学习总结
## 201521123122 <java程序设计>第十四周实验总结 ## 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多数据库相关内容. 2. 书面作业 1. M ...
- ThinkPHP空操作及命名空间
空操作是指访问不存在的路径: 解决方法:在控制其中创建 _empty方法 空控制器是指访问存在的控制器: 解决方法:创建EmptyController控制器 命名空间: 初识命名空间是Library: ...
- Hibernate中cascade属性的区别
xml对于集合的级联操作属性cascade的取值可以是: none: 不级联操作,默认为none save-update:针对的是当对当前对象进行save或update操作时,要对想关联的对象进行sa ...
- 7z命令行 极限压缩指令
摘抄自http://www.cnblogs.com/qanholas/archive/2011/10/03/2198487.html 7za a -t7z bag.7z "/home/fil ...
- eclipse配置maven + 创建maven项目(三)
上篇博文中我们介绍了maven下载.安装和配置(二),这篇博文我们配置一下eclipse,将它和maven结合,并我们创建一个maven的项目. 准备工作 在eclipse配置maven之前需要我们做 ...