我有一个检查某些东西的方法,并根据这些检查返回一个布尔值。它涉及单个分支If部分按顺序检查约5个条件。如果任何条件返回true,则方法将return true;
。如果没有条件返回true,则方法将return false;
。由于If部分之后的代码仅在没有条件为真的情况下才会运行,因此该代码在逻辑上与包含实际的Else语句相同。
对于这种情况,真的在Else声明中写一个更好的主意吗?
修改
事实证明,我需要有关哪些条件实际上为某些条件触发了“true”的信息,因此我更改了方法以返回int,其中-1表示“false”情况。逻辑仍然存在,如果没有条件成立,它将返回-1。所以,我不再拥有return (cond1 || cond2 || cond3 || cond4 || cond5);
的可缩减选项,但我也感谢大家的建议,因为我确实没有想过它(主要是因为cond3是一个非常复杂的条件,涉及检查中点的交点)两对DateTime对象,所以它看起来很丑陋)。虽然方法的性质发生了变化,但这个问题的性质还没有,所有答案仍然基本适用......
代码目前,用来解释它并删除所有通过cond5定义cond1的无关代码...
if (cond1) { return 1; }
else if (cond2) { return 2; }
else if (cond3) { return 3; }
else if (cond4) { return 4; }
else if (cond5) { return 5; }
答案 0 :(得分:11)
这真的是一种风格问题,你和你(和你合作的人)发现更清楚。一般来说,我个人认为结构:
if( a )
someResult = doSomething();
else if( b )
someResult = doSomethingElse();
else
someResult = doSomethingAnyways();
return someResult;
更清晰:
if( a )
return doSomething();
if( b )
return doSomethingElse();
return doSomethingAnyways();
答案 1 :(得分:5)
我倾向于喜欢这样的东西来回归硬性价值。
static bool SomeFunc(string arg)
{
bool result = false;
if (arg.Length < 10)
{
result = true;
}
else if (arg.StartsWith("foo"))
{
result = true;
}
if (!result && arg.EndsWith("foo"))
{
result = true;
}
return result;
}
答案 2 :(得分:4)
无论表达你的意图最好和/或最具可读性。
以下所有选项都完全有效:
if (condition1)
return true;
if (condition2)
return true;
if (condition3)
return true;
return false;
或
if (condition1)
return true;
else if (condition2)
return true;
else if (condition3)
return true;
else
return false;
或
return condition1
|| condition2
|| condition3;
如果条件不重要或者if
分支中有多个语句,我倾向于使用前两个选项。如果条件不复杂,最后一个选项可以提供更简洁的代码。
答案 3 :(得分:3)
就个人而言,我通常更喜欢使用ELSE,因为我认为它使意图更清晰。如果你写
if (sensorScan()==ENEMY)
return FIRE_PHASERS;
else
return SEND_GREETING;
读者很清楚,你正在处理一个条件下的两个分支。当然,在这样一个简单的案例中,每个分支只是一条线,无论如何这可能是显而易见的。但是在现实生活中,你经常在IF和许多条件下都有许多代码行,所以对于读者而言,每个块都以返回结束并且最后一个块因此只在以前执行时才会显而易见。条件是错误的。
我对这种做法的一个例外是代码是深度嵌套的。当它开始在页面上开始爬行时,我经常发现删除ELSE更具可读性。
另一个问题是当一个条件是奇数情况而另一个条件是主线时。是的,这是完全主观的,但在这种情况下,我倾向于尽可能将主线放在ELSE之外。
答案 4 :(得分:2)
听起来你问这是不是:
if ((condition1) ||
(condition2) ||
(condition3) ||
(condition4) ||
(condition5) )
{
return true;
}
else
{ return false;
}
可以变成这个:
if ((condition1) ||
(condition2) ||
(condition3) ||
(condition4) ||
(condition5) )
{
return true;
}
return false;
是
考虑一下:
return
(condition1) ||
(condition2) ||
(condition3) ||
(condition4) ||
(condition5);
答案 5 :(得分:1)
如果没有真正看到你的代码,很难说,但鉴于你有许多产生true
的条件,可能更清楚的是让代码落空并有一个最终{{1最后:
return false;
答案 6 :(得分:1)
这纯粹是风格和品味的问题。
我个人的偏好是仅在存在任何一种情况时才包括其他内容。
if (SomeCondition())
return "Boxers";
else
return "Briefs";
如果方法中有多个返回,那么我将省略最后的其他。
if (!OvenOn())
return false;
if (timeRemaining <= 0d)
return false;
if (DoorOpen())
return false;
return true;
在我看来,这个方案似乎最清晰。