升级 Java 编程规范的6个约定
作为 Java 开发人员,我们会遵循一系列的编码风格和开发习惯。习惯使然是一方面,另一方面,我们也从不停下脚步质疑这些习惯。一段时间以后,笔者养成了一些不同于常人的编码风格和开发习惯。当第一次了解到这些编码风格时,笔者感到又惊又气。但是,花了一段时间践行这些习惯之后,笔者意识到它们的确能造就更加简洁可控的代码库,同时也让开发者更加省心。
不要因这些想法的另类而否定它们,笔者建议你用几周时间尝试其中的一两条,如果你仍然不喜欢它们,换回以前的代码风格也用不了多久时间。
零注释(公共 API 除外)
笔者一度认为业内对于零注释这种编程习惯已经达成共识,但是当与许多同事合作之后,笔者发现事实并非如此。所以,让我们再次探讨这个问题:无注释。注释很快就会与代码脱节。假如你在一段代码的上面写了行注释,谁也不能保证下一个修改代码的人会更新注释。根据笔者的开发经验,没人会更新注释。原来的代码段可能被删除,业务需求也可能改变。因此,你的注释往往弊大于利。
对此,有个简单的解决方案,就是写自记录代码(self documenting code)。对变量、对象或者函数等进行命名时,选择能清晰表达其用途的名字。假如不够清晰,你需要对它们进行重构,将之拆分为更简洁的形式。只要能直观地表达其用途,过长的名字也无需担忧。别忘了编辑器有自动填写功能,没人需要敲出整个标识符的名字。
然而,公共 API 是一个明显的例外。假如你正在建立一个准备公开发版的库,那还是使用简洁的方法名比较好。不过, Javadoc 对这种情况大有裨益,但也仅限此情况。
不要用 “Test” 为测试方法开头
确实没有必要这么做。你写的方法会注释为测试,方法所在的类也存在于测试包中。明眼人都知道那是测试。其实,测试方法名应该明确指出测试的内容与条件。例如, “reversesTheWordRandomToModnar()”或者“adds70ToBalanceOf100ToMakeBalanceOf170()”,这些名字都准确表达了测什么功能以及预期的结果。
如果你正在使用 IntelliJ ,有一款特别棒的插件叫做 Enso 。它可以将测试名转化成一个句子,一目了然地显示测试的内容。这意味着当你在注视任何类的时候, Enso 都会展示其说明文档。
不要使用@Override
这个观点争议颇多,请听笔者说完。假如你不使用 @override ,最坏的结果就是你重写了一个函数,而调用时执行的却是原版函数,而非重写的版本。值得庆幸的是,在测试驱动开发模式下,测试整段代码时就会定位到这个 bug 。这让 @Override 成了一段冗余的代码。显然,冗余的代码不仅没有好处,还会让人分心。因此,停止使用 @Override ,而依赖 TDD(测试驱动开发)。
不要使用 getX()/setY() 这样的函数名
这确实让人不由得感到恼火。 getXXX 和 setXXX 这种命名方式是 Javabeans 时代的前朝遗物。而 JavaBeans 时代早已过去,这种命名方式也不再适用了。后者让代码变得令人反感却没有带来什么好处。去掉 get/set 这类关键字有利于字段名称的简洁。例如, car.engine() 函数将生成一个引擎对象,而 car.engine(new v8()) 将引擎设置为新的型号。如果需要读取多层级内的对象(例如:car.lights().frontLeft() 对比 car.getLights().getFrontLeft()),前者依旧表达清晰而且代码更加简洁。这个编程习惯笔者一开始也很反对,后来逐渐改变了看法,现在非常热衷这一风格。
可运行的代码>高性能的代码
这段内容和代码风格关系不大,而是更加泛泛而谈。每次看到人们为了一个问题,精雕细刻地设计解决方案,花费大量的时间,笔者都会感到不悦。其实,在最基本的层面上解决问题然后测试性能。十有八九,这类方案都是高速,可扩展或符合其他时髦概念的。相反,笔者经常看到人们设计了一个复杂的缓存解决方案,结果没有提高性能却把代码弄成一团乱麻。解决问题时,先实施你能采取的最基本方案,然后再进行优化。最起码,这种方式能让你有实例证明问题已经解决。
使用自己的异常类型
笔者又一次错误地认为这一开发习惯是业内的共识。 Java 中的检查性异常 (Checked exceptions) 很糟糕,几乎所有其他编程语言(例如C#)都意识到了这一点,所以它们甚至没有这个类型。在笔者编写的任何应用程序中,都会创建自己的异常类型,在这些应用程序中抛出的任何异常都会用笔者创建的异常类接住,然后抛出运行时异常。这让代码更加整洁(笔者从未在程序中抛出大量 XXXException ),也意味着笔者能通过 log 追朔异常来自代码的哪一部分或者这是完全出乎意料的异常类型。
(编译自:https://dzone.com/articles/upgrade-your-code-conventions-2)
OneAPM 为您提供端到端的 Java 应用性能解决方案,我们支持所有常见的 Java 框架及应用服务器,助您快速发现系统瓶颈,定位异常根本原因。分钟级部署,即刻体验,Java 监控从来没有如此简单。想阅读更多技术文章,请访问 OneAPM 官方技术博客。
本文转自 OneAPM 官方博客
升级 Java 编程规范的6个约定的更多相关文章
- FangDD Java编程规范
我们采用<Oracle/Sun原生的Java编程规范>和<Google Java编程规范> Google Java编程风格指南 January 20, 2014 作者:Haws ...
- 阿里巴巴Java编程规范考试
阿里巴巴Java编程规范考试 今天在阿里云官网把阿里巴巴Java编程规范认证考试考过了, 写下这篇文章总结一下考试中需要注意的知识点, 主体内容还是要直接看规范: 编程规约 异常日志 单元测试 安全规 ...
- JAVA编程规范(下)
JAVA编程规范(下) 2016-03-27 6. 代码的格式化 6.1 对代码进行格式化时,要达到的目的 1. 通过代码分割成功能块和便于理解的代码段,使代码更容易阅读和理解: 2. ...
- JAVA 编程规范(上)
2016-03-20 J120-CHARLIEPAN JAVA 编程规范(上) 1. 应用范围 本规范应用于采用J2EE规范的项目中,所有项目中的JAVA代码(含JSP,SERVLET,JA ...
- Java编程规范(一)
最近在看一本有关Java编程规范的书,书中精炼阐述了使用java语言时应该遵循的一些原则.接下来的一段时间我将在这里总结我的学习内容,也希望这一系列文章能够对有需要的人有所帮助. 不考虑任何编码规范的 ...
- Java编程规范(二)
二.格式规范 在上一篇的java编程规范(一)中我们讲述了在Java编码中的一般原则,虽然这些原则并不涉及具体的代码规范,但是这些原则却是我们在Java开发过程中所应该遵循的规范与思想.今天我们将学习 ...
- Java编程规范参考
谷歌Java编程规范-原版 谷歌Java编程规范-中文翻译版 阿里巴巴Java编程规范 阿里巴巴Java编程规范-IDEA 插件 阿里巴巴Java编程规范-Eclipse 插件
- 乐字节Java变量与数据类型之一:Java编程规范,关键字与标识符
大家好,我是乐字节的小乐,这次要给大家带来的是Java变量与数据类型.本文是第一集:Java编程规范,关键字与标识符. 一.编程规范 任何地方的名字都需要见名知意: 代码适当缩进 书写过程成对编程 对 ...
- java编程规范大全
JAVA编程规范大全 命名规范 定义这个规范的目的是让项目中所有的文档都看起来像一个人写的,增加可读性,减少项目组中因为换人而带来的损失.(这些规范并不是一定要绝对遵守,但是一定要让程序有良好的可读性 ...
随机推荐
- GDB 运行PYTHON 脚本+python 转换GDB调用栈到流程图
http://tromey.com/blog/?cat=17 http://blog.csdn.net/cnsword/article/details/16337031 http://blog.csd ...
- Java Interview Reference Guide--reference
Part 1 http://techmytalk.com/2014/01/24/java-interview-reference-guide-part-1/ Posted on January 24, ...
- Android(java)学习笔记173:BroadcastReceiver之 静态注册 和 动态注册
1. 广播接受者>什么是广播.收音机.电台:对外发送信号.收音机:接收电台的信号. >在android系统里面,系统有很多重要的事件: 电池电量低,插入充电器,sd卡被移除,有电话打出去, ...
- JavaScript 应用开发 #2:视图与模板
在用 Backbone 开发的 JavaScript 应用里面,除了模型与集合以外,另一个重要的部分就是视图,英文是 View .在视图里面,我们可以去监听在页面上发生的事件,还有与视图相关的模型和集 ...
- windows向ubuntu过渡之常用编程软件安装
不出意外的上篇文章又被踢出首页了,心情甚是悲桑..希望更多人能看到 1.安装codeblocks 直接在软件中心搜索codeblocks就可以 2.安装jdk并配置环境变量 http://www.li ...
- Linux自动化运维部署+运维
自动化部署及配置(Cobbler/Kickstart) 红帽发布的网络安装服务器套件 Cobbler可以说是一大Linux装机利器,可以快速的建立网络安装环境,据说比Kickstart还要好用. 分布 ...
- Hadoop书籍汇总
<Hadoop实战>陆嘉恒 <Hadoop - The Definitive Guide>Tom White,中文版<Hadoop权威指南> <Hadoop技 ...
- 需要重新启动计算机.必须重新启动计算机才能安装 SQL Server
在开始运行中输入regedit找到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SessionManager 在右边窗口找到PendingFi ...
- vsftpd安装指南
如果您用的是Fedora 或Redhat 系统,可以用下面的命令在线安装: [root@localhost ~]# yum install vsftpd 如果是debian 类系统,可以用apt 来在 ...
- html5 + css3 + zepto.js实现的微信广告宣传页
最新学习html5 + css3, 参考微信的一个推广页写出一个实例巩固自己知识,自己已经将原实例打包到自己博客文件当中,但是不知道如何提供下载,如有需要的朋友可以联系我qq309666726