3

有什么更好的做事方式?

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 都得到评估。

最好的方法是什么?

4

1 回答 1

8

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

因此,就性能而言,前两个选项更好。否则,这是一个品味问题。第二个选项将产生两个代码块,具有两个级别的代码缩进(如果您遵循标准的缩进规则,就像您所做的那样)。出于这个原因,也许您更喜欢第一个选项。

当然,如果你需要使用f1f2以后返回的值,可能要多次使用,第三种选择更胜一筹。

于 2012-07-24T14:26:27.490 回答