只是想知道一系列的if语句之间是否有什么区别,这些语句是彼此分开的,还是一组嵌套的if语句,每条语句都是从前面的语句缩进的呢?同样的跌势适用吗?
发布于 2016-01-12 23:00:17
if语句有几种样式。1.“布希”:
if(cond1)
{
if(cond2)
{
if(cond3)
action123;
else action123b;
}
else {
if(cond3b)
action12b3;
else action12b3b;
}
}
else {
/* ... */
}2: Long if/else链:
if(cond1)
{
action 1;
}
else if(cond2)
{
action 2;
}
else if(cond3)
{
action 3;
}
else if(cond4)
/* ... */带有“刚性”缩进的Long if/else链:
if(cond1)
{
action 1;
}
else {
if(cond2)
{
action 2;
}
else {
if(cond3)
{
action 3;
}
else {
/* ... */在我看来,关于好的编程风格的普遍共识是,像#1这样的“灌木丛”树很差--它们很难理解。(如果他们有2层深,3岁时很难理解,4岁时根本不可能理解的话,那就很难理解了。)
普遍的共识是,如#2所示的长if/else链要容易得多,更容易理解。这是一个很明显的成语,值得我用第二种方式来表达,而不是第三种更“合乎逻辑”的表达方式。
茂密的树木很难理解,有时我会把它们转换成链式if/else形式:
if(cond1 && cond2)
{
/* action if both true */
}
else if(cond1 && !cond2)
{
/* action if only cond1 true */
}
else if(!cond1 && cond2)
{
/* action if only cond2 true */
}
else {
/* action if neither true */
}这“效率较低”,因为cond1和cond2可能会被多次评估,但在这样做时,它会将CPU周期(这是很便宜的)与程序员的时间(这是昂贵的)和bug(可能会更昂贵)进行权衡。
发布于 2016-01-12 22:49:09
关键是确保你得到你想要的结果。如果您正在测试的所有内容在逻辑上都是独立的,那么您可以将所有If语句放在一行中。然而,通常情况下,所测试的条件是相互关联的;然后,使用嵌套的if语句来表示该逻辑通常更简单。
很值得创建测试用例,通过逻辑来执行所有可能的路径,以确保条件代码在所有情况下都能给出您想要的结果。
您最重要的考虑是正确地执行您的代码功能--紧跟在后面的是那些需要维护代码的人很容易理解您的代码。只有在实现了这些目标之后,才会考虑性能问题,前提是度量能够证明这段代码消耗了大量时间。
发布于 2016-01-12 22:52:40
这完全取决于你的具体情况。在没有看到任何例子的情况下,帮助你是非常困难的。
通常,串联有多个if条件会增加执行时间,并被认为是微不足道的逻辑。
如果您可以重新组织您的逻辑,以便使用嵌套的if条件,或者更好地选择其他控制逻辑,如switch或for,则会更好。
https://stackoverflow.com/questions/34755153
复制相似问题