我正在阅读本书中的一些例子,我注意到了两种不同的约定,它们具有各种返回条件。两者之间有什么区别吗?
//example 1
if(someCondition)
{
return (someValue);
}
return (someOtherValue);
//example 2
if(someCondition)
{
return (someValue);
}
else
{
return (someOtherValue);
}
就个人而言,我更喜欢第二个例子,因为它更明确,我觉得它更具可读性。
答案 0 :(得分:6)
如果您的语言包含条件运算符,我建议您使用它。
return condition ? ifTrue : ifFalse;
答案 1 :(得分:3)
除了外观之外没有区别。无论你选择哪一个,两者都会返回相同的。
答案 2 :(得分:3)
就此而言,当你从函数/方法调用中消除无效状态时,会出现这种情况。例如:
sqrt(x) {
if(x < 0)
return 0;
answer=math;
return(answer);
如果你使用elses,你最终可能会遇到很多非常可怕的嵌套。
这也涉及“单一回报”理论 - 很多人认为一个方法应该只有一个return语句。在某些情况下,这也会导致混乱。
在您的具体示例中,它是50/50 IMO。
做你喜欢的事,但我强烈建议尝试“立即测试并返回简单案例”理论。
答案 3 :(得分:2)
使用您喜欢的任何内容,并最好地使用您的代码或您的团队最了解的任何内容。
据我所知,目前还没有这方面的惯例。
答案 4 :(得分:2)
避免else
并利用早期return
可以防止您的代码过于嵌套。哪个例子看起来更具可读性?
function doStuff (thing) {
if (thing.foo) {
alert ("thing.foo is alive and well");
if (thing.foo.bar) {
alert ("thing.foo.bar is alive and well");
if (thing.foo.bar.baz) {
alert ("thing.foo.bar.baz is alive and well");
// TODO: stuff with thing.foo.bar.baz
} else {
alert ("thing.foo.bar.baz doesn't exist!");
}
} else {
alert ("thing.foo.bar doesn't exist!");
}
} else {
alert ("thing.foo doesn't exist!");
}
}
或
function doStuff (thing) {
if (!thing.foo) {
alert ("thing.foo doesn't exist!");
return;
}
alert ("thing.foo is alive and well");
if (!thing.foo.bar) {
alert ("thing.foo.bar doesn't exist!");
return;
}
alert ("thing.foo.bar is alive and well");
if (!thing.foo.bar.baz) {
alert ("thing.foo.bar.baz doesn't exist!");
return;
}
alert ("thing.foo.bar.baz is alive and well");
// TODO: stuff with thing.foo.bar.baz
}
......我认为第二个更具可读性!
答案 5 :(得分:1)
我个人认为在方法中有一个return语句总是好的,否则代码可能有点难以阅读,因而无法维护。这样做
def returnVal = default;
if (cond) {
returnVal = whatever
}
return returnVal