为什么许多返回语句在 OOP 中不是一个好主意

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡/ 赠书活动

目前,正在 星球 内带小伙伴们做第一个项目:全栈前后端分离博客项目,采用技术栈 Spring Boot + Mybatis Plus + Vue 3.x + Vite 4手把手,前端 + 后端全栈开发,从 0 到 1 讲解每个功能点开发步骤,1v1 答疑,陪伴式直到项目上线,目前已更新了 204 小节,累计 32w+ 字,讲解图:1416 张,还在持续爆肝中,后续还会上新更多项目,目标是将 Java 领域典型的项目都整上,如秒杀系统、在线商城、IM 即时通讯、权限管理等等,已有 870+ 小伙伴加入,欢迎点击围观

这个 辩论 很老了,但我也有话要说。问题是一个方法是否可以有多个 return 语句或只有一个。答案可能会让您大吃一惊:在纯面向对象的世界中,方法 必须 只有 一个 return 语句,除此之外 别无 其他。是的,只是一个 return 声明,仅此而已。没有其他运营商或声明。刚 return 。所有支持多个 return 语句的论点都与面向对象编程的理念背道而驰。

这是一个经典的例子:


 public int max(int a, int b) {
  if (a > b) {
    return a;
  }
  return b;
}

上面的代码有两个 return 语句,它比这个只有一个 return 更短:


 public int max(int a, int b) {
  if (a > b) {
    return a;
  }
  return b;
}

更冗长,更难阅读,更慢,对吧?正确的。

这是 面向对象世界中的代码:


 public int max(int a, int b) {
  if (a > b) {
    return a;
  }
  return b;
}

你现在怎么看?没有语句或运算符。没有 if 也没有 > 。相反,有类 If GreaterThan 对象

这是一种纯粹而干净的面向对象方法。

但是,Java 没有。 Java(和许多其他伪 OOP 语言)为我们提供了 if else switch for while 等运算符,而不是提供内置类,后者会做同样的事情。正因为如此,我们继续从过程的角度来思考,并一直在讨论两个 return 语句是否比一个更好。

如果你的代码是真正面向对象的,你将不能有多个 return 。此外,除了每个方法中的 return 之外,您将一无所有。实际上,您在整个软件中只有两个运算符 new return 。就是这样。

在我们到达那里之前,让我们坚持只 return 一次并至少尝试看起来像纯 OOP。