【发布时间】:2016-06-22 19:28:19
【问题描述】:
Java 社区中是否存在一种思想流派,即在一个方法中使用多个返回,如下所示:
public SomeClass someMethod(int someValue) {
if (someValue < SOME_CONSTANT) {
return null;
}
SomeClass someClass = null;
// and now, the body of the method that performs
// the heavy lifting
return someClass;
}
我在“单入口点,单出口点”的口头禅下“长大”,但我可以看到使用简单的守卫如何使代码更具可读性/可维护性(即消除嵌套级别)。 “单出口”版本看起来像......
public SomeClass someMethod(int someValue) {
SomeClass someClass = null;
if (someValue < SOME_CONSTANT) {
// and now, the body of the method that performs
// the heavy lifting
}
return someClass;
}
诚然,这是一个微不足道的例子,但我可以看到更多的先决条件可能会导致更大的嵌套。就个人而言,我仍然会坚持“不要在整个方法中添加返回”以用于其他目的(即,仅“返回”作为守卫的结果,或在方法结束时),但我想知道如何Java 社区的其他人都觉得。
添加了“苹果示例”...
public Pie makeApplePie(Apple apple) {
if (apple == null) {
return null;
}
// do cool stuff with apple
return new Pie();
}
【问题讨论】:
-
someMethod在您描述的示例中似乎执行 两个 角色,而不是一个。通常,我会在一个方法中执行someValidation,如果它通过,则someMethod否则继续工作直到someValidation通过。如果你有一个方法cutApple接受不是苹果的对象,但对非苹果不做任何事情,为什么不在要求切割它之前验证对象是苹果呢? -
你有点错过了我的问题的重点。如果我想要“苹果”,那么我会输入参数(做一个单独的验证)。但是,使用你的例子。我在原始问题中添加了一个“苹果示例”。但是我最初关于使用返回作为保护 a 方法的主要实现的问题仍然存在。
-
我从来没有理解过单一退出规则。就我而言,这与良好的风格完全相反。早退好,晚退差。这是人们为了自己的利益而遵循的规则。有一个单独的 return 语句没有任何价值。就像在您的示例中一样,扭曲自己以获得一个返回值会导致创建不必要的返回值变量。老实说,我从来没有发现自己对函数从哪里返回感到困惑。这不是需要缓解的混淆点。
标签: java coding-style