If statement IF语句与代码效率

If statement IF语句与代码效率,if-statement,If Statement,这与任何问题无关,只是我在想。代码中出现大量IF语句是否意味着代码设计不好,是否会降低效率。一般来说,出现大量“IF”语句被认为是设计不好。考虑用多态替换条件句。这是Martin Fowler第255页《重构:改进现有代码的设计》一书中的主题之一。如果没有这本书,请查看以下文章:理论上,大量的“if”语句不会显著降低代码效率。代码只确定表达式的布尔值并决定是否继续。但是,如果在迭代循环中有许多“If”语句,那么就效率而言,这可能会导致更大的问题 糟糕的设计是我不想提及的另一个问题(Ziminji

这与任何问题无关,只是我在想。代码中出现大量IF语句是否意味着代码设计不好,是否会降低效率。

一般来说,出现大量“IF”语句被认为是设计不好。考虑用多态替换条件句。这是Martin Fowler第255页《重构:改进现有代码的设计》一书中的主题之一。如果没有这本书,请查看以下文章:

理论上,大量的“if”语句不会显著降低代码效率。代码只确定表达式的布尔值并决定是否继续。但是,如果在迭代循环中有许多“If”语句,那么就效率而言,这可能会导致更大的问题


糟糕的设计是我不想提及的另一个问题(Ziminji比我更了解它)。

如果您真的想优化代码,请注意以下几点:

if (complexCalculation(someVariable) > 10)
{
}
else if (complexCalculation(someVariable) > 5)
{
}
关键是,如果您试图优化某些代码,请尝试在变量中“缓存”计算结果,而不是重复多次相同的计算

int cached = complexCalculation(someVariable);

if (cached > 10)
{
}
else if (cached > 5)
{
}

为什么会这样?现在如果
complexCalculation
是基于其参数确定的(因此complexCalculation(N)==complexCalculation(N)始终,简单地说,您使用相同的参数调用它两次,您将收到两次相同的结果始终),并且没有副作用(因此它不会修改任何其他内容),然后编译器可以自由地对其进行优化。问题是,编译器通常无法验证函数是否具有确定性且没有副作用,并且很少有语言(主要是函数语言,如F#,Haskell…)可以轻松地将其告知编译器(从技术上讲,在functiona语言中,所有函数都应该是确定性的,并且没有副作用:)。

-1这只适用于OOP,而不适用于一般编程。OP没有提到任何特定的语言或范例。虽然我的批评是正确的,我的答案适用于OOP,但我的答案对于问题中糟糕的设计部分并没有错。作为我的批评者的参考,在其他编程范例中,它仍然可能是糟糕的设计。顺便说一句,否决投票应该保留给那些没有效率和无关的答案,而我的答案不是。这里的关键词是“可以”。在特定情况下,几乎任何东西都可以被认为是糟糕的设计。福勒确实描述了这样一种特殊情况。但简单地概括起来,存在大量“如果”语句被认为是糟糕的设计是不正确的。因此,-1。