环球热头条丨精简注释-Java性能优化的第一步
项目代码是“编写一次,阅读多次”。阅读者包括代码编写者、架构师、审查人员,以及后来的维护人员。能让阅读代码更轻松,有利于增强项目或产品的可维护性。
代码可读性是各种软件工程方法、面向对象实践、重构,以及新技术应用到项目中的一个重要前提,如果代码难以阅读,那么所有这些方法和理论都难以在项目中实施;如果代码难以维护,那么性能优化也无从谈起。
(资料图片)
在代码块中应该尽量减少注释的编写,尤其是描述设计思想和实现过程的注释,原因是代码会不停地随着业务需求变化而变化,注释往往在重构中被 IDE 忽略,也会被人为忽略。用Clean Code 中的话来说,就是注释容易“腐烂”。避免注释“腐烂”需要我们尽力维护代码和注释的同步,在代码中精简注释也是防止注释“腐烂”的最好办法。
下面列举一些代码内注释的使用原则。
场景 1:及时删除被注释的代码。
被注释的代码应该及时删除,否则这段代码将传给一代又一代的代码维护者,无人敢删除这段代码。如下工作流引擎,里面有一段 2007 年编写的代码让人感到迷惑:
//别删除这块代码 by WX,07.09//Task[] tasks = taskService.query();//...Task task = taskService.queryOne();
开发者不应该注释代码块,应该尽快删除。如果想恢复,那么可以通过 Git 工具来恢复。
场景 2:通过注释解释代码行为。
代码注释应该说明代码的动机,而不是再次用文字描述一遍代码过程。以下注释相当于没有:
/*字符内容符合 18 个数字或 15 个数字*/public static final String REGEX_ID_CARD = "(^\\d{18}$)|(^\\d{15}$)";
不如改成如下内容:
/*身份证号验证*/public static final String REGEX_ID_CARD = "(^\\d{18}$)|(^\\d{15}$)";
网上一篇《如何编写无法维护的代码》中就提到一个原则,只记录 How 而不是 Why,就会让代码无法维护。
例如,对账户状态值进行注释,代码如下:
/* 状态 0 正常 1 异常 2 未知 */private Integer status;
如果随后 status 添加了更多的含义,比如添加 3 表示冻结,则很可能忽略修改这里的注释。最好的办法是使用枚举,并且取消注释。
private Integer status = UserStatus.Nomral.getValue();
场景 3:不要在代码中记录更改历史的数据。
//原来版本使用 StringBuffer,改成 StringBuilder bt WX 20190302StringBuilder sb = ...
这段注释毫无存在的必要,可以通过 Git 这样的工具来查看代码更新记录和更新人,以及更新原因。没有必要在代码里标注代码相关人,如果用 IDEA,则可以很方便地查看代码的更新人。在 Editor 左侧代码行空白处单击鼠标右键,在弹出菜单中选择 Annotation,如下图所示。
场景 4:把代码块提取到一个方法中,通过方法名来解释代码作用。
//发送短信给用户StringBuilder sb = new StringBuilder("您的余额是");sb.append(user.getBalance()).append("元-");sb.append(platformName).append(""。)sms.send(sb.toString(),user.getMobile());
以上发送短信的代码可以提取到一个短方法中,代码调用此短方法即可:
sendUserBalanceBySms(user,platformName);
这个短方法的意义是使得代码容易维护:
1.如果需要修改发送短信的内容,则可以直接定位到 sendUserBalanceBySms,不需要从上百行代码中寻找。
2.在阅读 sendUserBalanceBySms 调用所在代码块的时候,sendUserBalanceBySms 无关紧要,可以习惯性地忽略,如果没有这个方法,则需要阅读数行这种代码,哪怕已经熟悉代码了。用这种短方法减轻了阅读负担。
场景 5:使用一个临时变量代替注释。
对于一段计算逻辑,或者一个方法调用,使用临时变量来说明其结果含义,比注释更容易维护。以下代码:
//返回一年总的费用return calcPay(user,type);可以用一个临时变量来表示,代码如下:BigDecimal payByYear = calcPay(user,type);return payByYear;
使用临时变量不会影响性能,两者的虚拟机代码都是一样的。
场景 6:取消 HTML 风格的注释。
如果注释中包含过多的 HTML 标签,虽然生成的 Javadoc 容易阅读,但并不利于直接在源码中阅读。以下代码包含过多的 HTML 标签:
/*** 输入对应以下输出* <table border=0 cellspacing=3 cellpadding=0>* <tr>* <th align=left>输入</th>* <th align=left>输出</th>* <tr>* <td><code>1</code></td>* <td><code>Success</code></td>* <tr>* <td><code>2</code></td>* <td><code>Failure</code></td>* </tr>* </table>*/
可以去掉 table 标签,改成如下内容:
/** 输入对应以下输出* <p>1,输出是 Success* <p>2,输出是 Failure*/
场景 7:取消没有必要的注释。
有些方法过于简单,没有必要添加注释,比如 JavaBean 的 getter 和 setter 方法。以下是没有必要的注释:
/*用户名称*/private String userName;
内容摘自《高性能Java系统权威指南》第六章
李家智 著
本书特点:
内容上,总结作者从事Java开发20年来在头部IT企业的高并发系统经历的真实案例,极具参考意义和可读性。
对于程序员和架构师而言,Java 系统的性能优化是一个超常规的挑战。这是因为 Java 语言和 Java 运行平台,以及 Java 生态的复杂性决定了 Java 系统的性能优化不再是简单的升级配置或者简单的 “空间换时间”的技术实现,这涉及 Java 的各种知识点。
本书从高性能、易维护、代码增强以及在微服务系统中编写Java代码的角度来描述如何实现高性能Java系统,结合真实案例,让读者能够快速上手实战。
风格上,本书的风格偏实战,读者可以下载书中的示例代码并运行测试。读者可以从任意一章开始阅读,掌握性能优化知识为公司的系统所用。
本书适合:
中高级程序员和架构师;
以及有志从事基础技术研发、开源工具研发的极客阅读;
也可以作为 Java 笔试和面试的参考书。
关键词:
推荐阅读
玉米历史介绍 玉米什么时候传入中国
玉米历史介绍玉米原产美洲,据《饮食须知》(1367年左右)记载,说到玉蜀黍,加上元朝尚食局(元朝朝廷管理皇帝饮食的专门机构)有御麦面,认为 【详细】
垃圾短信电话号码如何举报?12321官网简介
垃圾短信电话号码如何举报?网页版:搜索12321进入百度不良网络和垃圾短信处理官网。然后选择左边的举报短信进入短信举报界面。然后填写里面 【详细】
pvc是什么 生产pvc的上市公司都有哪些?
pvc是什么pvc中文名是聚氯乙烯,曾是世界上产量最大的通用塑料,在建筑材料、日用品、管材等领域应用,市场十分广泛。那么,A股市场中生产p 【详细】
搜狗正式并入腾讯 搜狗公司简介
搜狗正式并入腾讯前段时间,一直有消息传出,腾讯即将收购搜狗,近日,搜狗正式并入腾讯的消息冲上了热搜榜单,吸引了众多网友关注,具体是 【详细】
中国古代十大名刀是什么 中国古代十大名刀简介
中国几乎所有的朝代都有记载名刀诞生的记录。从初唐大一统战争到盛唐的一切内外战争都出现过冷兵器——唐刀,史上对后世影响很大。中国古代 【详细】
相关新闻
- 快讯:史记 马云归国记
- 环球热头条丨精简注释-Java性能优化的第一步
- 「佰条建议」人工智能时代如何更好地提高认知?
- vps和指纹浏览器哪个好-天天精选
- 耐用才是硬道理,小米11 Pro升级MIUI14后,又能再战几年了 天天关注
- 阴囊潮湿用什么药效果最好(男人阴囊潮湿吃什么药)|环球快看点
- 当前简讯:阿卡玛斯(惊天战神2阿卡玛斯出了吗)
- 全球最大!货拉拉冲刺港交所 高瓴、腾讯是重要投资方!
- iOS16.5 Beta1值得升级吗?iOS16.5 beta1体验评测 全球报资讯
- “曼德拉效应”越发明显,是人类记忆被集体篡改,还是平行宇宙?
- 鬼魂真的存在吗?|百事通
- 红米手机再好也别乱买,这四款红米手机堪称完美,流畅使用三五年
- 显示"XX撤回了一条消息",不是个好功能! 全球速讯
- 新生报到(大一新生大学报到流程 如何报到) 全球热门
- 广东华兴银行:以优质综合金融服务助力广东高质量发展
- 在线答题 智能题库 机构教育培训好帮手|钉考题库_天天时快讯
- 确保互联网广告乱象“一键关闭”
- 当微信“搜一搜”学会了“问一问”
- 蚂蚁集团前员工涉嫌强奸被抓
- "腾讯云"携手"蒙妮坦" 共建数字经济学院"腾云班"