3

物事を行うためのより良い方法は何ですか?

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

また

if f1() then
  if f2() then

また:

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

if fboolean1 and fboolean2 then...

最初の例では、2つの関数のどちらが評価されるかわかりません。2番目の例では、f1がtrueと評価された場合にのみ、f2が評価され、3番目の例では、f1とf2の両方が評価されます。

これを行うための最良の方法は何ですか?

4

1 に答える 1

8

コンパイラは賢いです。最初のサンプルでは、​​ if f1returns false、 thenf2は呼び出されません(遅延評価またはブール短絡評価を無効にしてデフォルトのコンパイラ設定を変更しない限り)。したがって、最初のオプションは 2 番目のオプションと同じです (デフォルト設定を変更していない限り)。

したがって、パフォーマンスに関しては、最初の 2 つのオプションの方が優れています。そうでなければ、それは好みの問題です。2 番目のオプションでは、2 つのレベルのコード インデントを含む 2 つのコード ブロックが生成されます (インデントの標準的な規則に従っている場合は、そのように見えます)。おそらく、この理由から最初のオプションを好むでしょう。

もちろん、 and によって返された値f1f2後でおそらく数回使用する必要がある場合は、3 番目のオプションの方が優れています。

于 2012-07-24T14:26:27.490 に答える