使用big if子句或堆叠它们?

时间:2012-07-24 14:21:37

标签: delphi if-statement

什么是更好的做事方式?

if f1() and f2() then...

if f1() then
  if f2() then

或:

fBoolean1 := f1()
fBoolean2 := f2()

if fboolean1 and fboolean2 then...

在第一个例子中,我不确定这两个函数中的哪一个被评估。在第二个示例中,仅当f1计算为true时才会计算f2,而在第三个示例中,f1和f2都会被评估。

最好的方法是什么?

1 个答案:

答案 0 :(得分:8)

编译器很聪明。在第一个示例中,如果f1返回false,则甚至不会调用f2(除非您通过禁用延迟评估或<来更改默认编译器设置em>布尔短路评估)。因此,第一个选项相当于第二个选项(同样,除非您更改了默认设置)。

因此,在性能方面,两个第一选择更好。否则,这是一个品味问题。第二个选项将产生两个代码块,具有两级代码缩进(如果您遵循标准的缩进规则,就像您似乎那样)。也许你更喜欢第一种选择。

当然,如果您需要稍后使用f1f2返回的值,可能需要多次,第三个选项是优越的。