一种是这样:
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). 总结
以上是内存溢出为你收集整理的关于方法返回值的两种处理模式全部内容,希望文章能够帮你解决关于方法返回值的两种处理模式所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)