关于Java编码规范
一、尽量使用卫语句
卫语句概念
条件表达式通常有两种表现形式,第一种形式是:所有分支都属于正常行为;第二种形式则是:条件表达式提供的答案中只有一种是正常行为,其他都是不常见的情况。这两类条件表达式有不同的用途,这一点应该通过代码表现出来。
如果两条分支都是正常行为,就应该使用形如if...else...的条件表达式;如果某个条件极其罕见,就应该单独检查该条件,并在该条件为真时立刻从函数中返回。这样的单独检查常常被称为“卫语句”(guard clauses)
1.条件检查替换
这是一个计算员工薪资的方法,其中以特殊规则处理驻外员工和退休员工的薪资。这些情况不常有,但的确会偶尔出现。
public double getSalary() {
double result;
if (this.isSeparated) {//驻外员工
result = this.separatedSalary();
} else {
if (this.isRetired) {//退休员工
result = this.retiredSalary();
} else {//正常员工
result = this.normalSalary();
}
}
return result;
}
这段代码中,非正常情况的检查掩盖了正常情况的检查,所以应该用卫语句来取代这些条件检查,以提高程序清晰度。对于每个检查,放进一个卫语句。卫语句要不就从函数中返回,要不就抛出一个异常。
public double getSalary() {
if (this.isSeparated) {//卫语句
return this.separatedSalary();
}
if (this.isRetired) {//卫语句
return this.retiredSalary();
}
return this.normalSalary();
}
2.反转条件替换
这是一个已知长宽高求长方体体积的方法,但有个特殊的需求:高大于0时,打印万猫学社。(惊不惊喜?意不意外?突不突兀?变不变态?是的,有时候我们接到的需求就是这样的。)代码是这样的:
public double getVolume(double length, double width, double height) {
double result = 0.0;
if (height > 0.0) {
System.out.println("万猫学社");
if (length > 0.0 && width > 0.0) {
result = length * width * height;
}
}
return result;
}
还是用卫语句替换条件检查,但是我们需要将相应的条件反转过来,也就是做逻辑非运算。
public double getVolume(double length, double width, double height) {
if (height <= 0.0) {//卫语句,!(height > 0)
return 0.0;
}
System.out.println("万猫学社");
if (length <= 0.0 || width <= 0.0) {//卫语句,!(length > 0 && width > 0)
return 0.0;
}
return length * width * height;
}
为什么要使用卫语句?
卫语句的精髓是:给某一条分支以特别的重视。如果使用if...else...结构,你对if分支和else分支的重视是同等的。这样的代码结构传递给阅读者的消息就是:各个分支有同样的重要性。
卫语句就不同了,它告诉阅读者:“这种情况很罕见,如果它真的发生了,请做一些必要的整理工作,然后退出。”如果对方法剩余部分不再有兴趣,当然应该立刻退出。引导代码的阅读者去看一个没有用的else区段,只会妨碍他们的理解。用了卫语句以后,代码更容易被理解,被维护。
部分转载于:https://www.cnblogs.com/heihaozi/p/11818042.html
关于Java编码规范的更多相关文章
- 资料推荐--Google Java编码规范
之前已经推荐过Google的Java编码规范英文版了: http://google-styleguide.googlecode.com/svn/trunk/javaguide.html 虽然这篇文章的 ...
- Eclipse formater(google Java 编码规范)
1. 谷歌Java编码规范 http://google-styleguide.googlecode.com/svn/trunk/javaguide.html 2. 下载配置文件: https://co ...
- 标准的Java编码规范手册
编码规范体现出一个开发者的基本素质,良好的编码规范可以提高团队编码的效率,避免很多不必要的问题.今天分享一个标准的Java编码规范给大家,希望对于大家今后的开发工作带来帮助. 编码规范的意义 ...
- 阿里Java编码规范
详细,全面 很不错 阿里 Java编码规范
- Java基础学习总结(92)——Java编码规范之排版、注释及命名
为使开发人员养成良好的开发习惯,编写可读性强.易维护的程序,结合以往资料,现整理Java编码规范,将之作为开发人员的参照依据. 一.排版 1.相对独立的程序块之间必须加空行 下列情况应该使用一个空行: ...
- CheckStyle,定制属于自己的Java编码规范
前言 如今,代码规范几乎是当下稍有追求的团队都要求做到的,但是对于Java编码规范,不同的公司或团队却有着不同的标准.尽管官方提供了一些标准,但是在基本规则的基础上,各大公司又有自己的规范,比如Sun ...
- Google 推出的 Java 编码规范(转)
原文地址:http://www.dahuatu.com/1225/988516.html 原文地址:http://www.dahuatu.com/1225/988516.html 原文地址:http: ...
- Google的Java编程风格指南(Java编码规范)
这份文档是Google Java编程风格规范的完整定义.当且仅当一个Java源文件符合此文档中的规则, 我们才认为它符合Google的Java编程风格. 与其它的编程风格指南一样,这里所讨论的不仅仅是 ...
- 个人整理--Java编码规范
编码规范对于开发人员来说是非常重要的,有以下几个原因: 1.一个软件的生命周期中,80%的花费在于维护 2.几乎没有任何一个软件,在其整个生命周期中,均由最初的开发人员来维护 3.编码规范可以改善软件 ...
- 阿里java编码规范考试总结
前几天,考了阿里编码规范刚好80险过,总结出以下例题,答案有错,欢迎评论 1.关于方法的返回值是否可以为null,下列说法正确的是(BCD) A.方法的返回值可以为null,如果是集合,必须返回空集合 ...
随机推荐
- Js获取页面地址参数
var url = window.location.href; //获取当前窗口的Url; 结果:http://localhost:61768/Home/Index?id=2&age=18 v ...
- P1056 组合数的和
P1056 组合数的和 转跳点:
- Codeforces 2A :winner
A. Winner time limit per test 1 second memory limit per test 64 megabytes input standard input outpu ...
- Kafka--生产者
一个应用程序在很多情况下需要往Kafka写入消息:记录用户的活动(用于审计和分析),记录度量指标,保存日志消息,记录智能家电的信息,与其他应用程序进行异步通信,缓冲即将写入到数据库的数据,等等. 多样 ...
- Linux 下配置多路径及SCSI扫描磁盘重新发现大小
Linux SCSI扫描磁盘重新发现大小: # for i in `find /sys/class/scsi_host/host*`; do echo 1 >> $i/issue_lip; ...
- 文本编辑器vim/vi——模式切换及输入模式
vim一共有三种模式:命令模式.输入模式.末行模式 要从命令模式切换到输入模式:a,i,o a——append 属于在后面追加内容:i——insert 属于插入,在前面插入内容:o——other 属于 ...
- bzoj 2281: [Sdoi2011]黑白棋
再次,,,,,虚(一开始看错题了,看成一次移动一个棋子,能移动1-d个格子...这样的话有没有大神会做??本蒟蒻就教) 额,,直接%%%%把...http://hzwer.com/5760.html ...
- JPA#复杂查询#引子
_ 震惊....简历上写精通JPA的被下面几个问题震呆了.... 几个问题: 复杂查询如何从前端传递到后端,特别是多个条件的.且具有and和or等复杂逻辑,这个要如何封装呢? 多表查询? 自定义sql ...
- 四十七、在SAP中,把功能区块整合成一个函数,通过调用函数的办法使代码简洁明了
一.我们查看上一次的代码,非常之凌乱,大体可以分为以下这几个区块 二.我们把最后的2个部分,用函数的方式来写,写法如下: 三.执行程序,和之前一样 四.输出结果
- Elasticsearch核心概念
Elasticsearch 核心概念 Cluster 代表一个集群, 集群中有多个节点, 其中一个为主节点, 该节点可以通过选举产生.(主从节点只针对于集群内部) 去中心化: 对于集群外来说无中心节点 ...