我听说这个方法必须有一个(不多)return
语句。是真的?
例如哪种方法更好?
//1
public Object getResult() {
Object result;
if (someValue != null) { **// NOT null checking**
// initializing result
}
return result;
}
// 2
public Object getResult() {
Object result;
if (someValue == null) { // **null checking**
return null;
}
// initializing result
return result;
}
答案 0 :(得分:2)
结构编程的一个指导原则是不要在函数(方法)中使用多个出口点。原因主要是可读性(尝试绘制一个有多个退出点的算法,看起来不太好)。然而,今天很少有人在编写代码之前绘制算法,现代IDE可以检测到无法访问的代码等。多个退出点方法允许更多的灵活性,因此你可以创建一个方法,在代码之前返回,如果它继续产生一些副作用与执行。而且,这在大多数情况下阻止了复杂条件测试的使用,因此可以更优化(即更快)。当然编译器如何更改代码是一个困难的问题,但我认为它们中的大多数都是从单一退出方法中提出的多退出方法。我倾向于制作单一退出方法,只要它不会显着影响性能和/或涉及复杂,难以阅读,选择(如果,切换案例itd。)
答案 1 :(得分:1)
如果您在Eclipse中使用checkstyle,那么肯定是一个。但是在某些情况下它会使编写代码变得更加困难(例如在一些递归方法中你正在测试一个基本情况)如果你在这些情况下只能有一个return
语句我认为你应该使用的是什么最好的。
所以 取决于上下文 。
答案 2 :(得分:1)
理想情况下,返回语句必须有多少函数?
我只会说一个,但不会以可读性为代价。
如果有超过return
语句提高了代码的可读性,则应该选择从函数中获得多个退出点。
最后,它取决于个人选择和项目编码指南。
如果我要在您提供的两个版本的代码之间进行选择,我将选择第二个版本。对我来说它更具可读性。
答案 3 :(得分:1)
我说你绝对可以有多个退货声明。如果你有“只有一个退货声明”的规则,你可能会得到这样的结论:
if (value != null) {
if (value.fieldA != null) {
if (value.fieldB != null) {
// initialize
}
}
return result;
而不是:
if (value == null) {
return null;
}
if (value.fieldA == null) {
return null;
}
if (value.fieldB == null) {
return null;
}
// initialize
return result;
我发现第二个更易读,更容易调试,在某些情况下可能更有效。
答案 4 :(得分:0)
在第二个例子中将返回null并且读取下一个规则。当我检查函数接受的值时,我添加了return语句,因为如果我的值不好,我不想处理所有函数,所以我重新返回null或抛出异常。
答案 5 :(得分:0)
<强>&GT;两者都是正确的。这取决于你的项目情景。
对于Ex:
在您的代码的第二种情况下,如果我在此
下面有许多行代码**if (someValue == null)
{
// **null checking**
return null;
}**
然后返回&#34; 如果&#34;陈述是正确的
如果你的第一个例子(代码)中的代码非常少,那么在每个if条件中设置返回值并返回它@end就可以了
<强>&GT;参考this也
答案 6 :(得分:0)
如果您只有一份退货声明;代码看起来更干净。 但是对退货声明的数量没有严格的限制。所以你可以有多个return语句。但这也并不意味着要说10个返回语句。
我觉得你有2-3个回复陈述;方法看起来更干净,更容易理解。如果返回语句的数量增加,则表明您应该执行代码重构并将一个方法转换为多个方法。
答案 7 :(得分:0)
这可能是每个人都有自己的看法。但我认为没有明确的正确或错误的答案。我通常不关心返回语句的数量。如果有理由留在某种方法中,那么我就会退出。