加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

关于方法返回值的两种处理模式

发布时间:2020-12-14 17:06:09 所属栏目:大数据 来源:网络整理
导读:目前在处理返回值方面,有两种代码风格: 一种是这样: result = method1();if (result is error){ //根据返回结果判断是否退出 ...//加错误码 return result;}result = method2();if (result is error){ //根据返回结果判断是否退出 ...//加错误码 return resu
目前在处理返回值方面,有两种代码风格:

一种是这样:
result = method1();
if (result is error){ //根据返回结果判断是否退出
         ...//加错误码
         return result;
}
result = method2();
if (result is error){ //根据返回结果判断是否退出
         ...//加错误码
         return result;
}
do something...


另一种是:
try{
         method1() // 如果有逻辑问题抛出ErrorCodeException

         method2() // 如果有逻辑问题抛出ErrorCodeException

         do something...
}catch(ErrorCodeException e){
         // 将ErrorCodeException异常转换为Result
         return result;
}
但是我推荐采用第二种方式,理由主要有三个方面: 1. 从重构的角度来说,如果一个方法中有多个return出口,当方法膨胀之后需要将一块代码抽取出来单独形成一个方法的时候比较困难,而采用异常的方式则可以很容易的抽取出单独方法. 2. 从代码重用的角度来说,第一种如果method1,method2方法有多个地方调用,这些需要调用的地方大部分情况下都要对结果进行判断加错误码并返回结果,这个是重复的代码,这样重复性代码在ic中是随处可见的,我希望通过抛错误码异常的方式来减少这种重复的东西. 3. 从封装的角度来说,将非正常结果的处理封装在方法的内部,可以提高内聚性. 这样做的两个缺点: 1. 必须将method1,method2套在一个try...catch中,然后将ErrorCodeException转换成result. 2. 还有一些方法的确需要根据情况自己处理返回值的,不希望抛出异常,你必须提供一个不抛出异常的方法 3. 在性能上,因为需要使用到异常堆栈,这个会有一定的性能损失,如果是分布式应用的话,尽量改错误码,而不是异常,因为异常比简单的错误码方式序列化的成本会更高 我采用第二种方式是来自于对这样的语句变体: 有些方法在开始处都会对参数进行检查的卫语句,比如非空,非0检查,如果参数不合格抛出IllegalArgumentException(如果不是因为要返回错误码,完全可以抛出IllegalArgumentException).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读