2015-11-01 87 views
-2

如果在if語句的評估表達式中使用計算,然後在執行語句中再次使用計算,則執行計算兩次或引入新變量的效率會更高還是更低?if語句中應重複計算嗎?

換句話說,是

if ($x <> some_complex_calculation()) { 
    ... 
    $x = some_complex_calculation(); 
} 

比這更好:

$result = some_complex_calculation(); 
if ($x <> $result) { 
    ... 
    $x = $result; 
} 

或者說,是這樣的:

比這個
if ($x <> get_something_from_database()) { 
    ... 
    $x = get_something_from_database(); 
} 

更好:

$result = get_something_from_database(); 
if ($x <> $result) { 
    ... 
    $x = $result; 
} 
+2

做一次計算 – 2015-11-01 20:03:22

+0

以上所有可以簡化爲'$ x = some_complex_calculation();',條件在這些行中沒有任何意義。 – arkascha

+0

你是對的,@arkascha。條件對我提供的代碼沒有意義。我用一個簡單的例子來說明我的問題,並且我在代碼中加入了'...'來表示賦值是「a」語句,而不是「唯一」語句,用於執行。 – jcropp

回答

2

當然,這將始終是更有效地節省了計算的結果中,不管它有多麼微不足道,所以如果這是你所關心的使用臨時的唯一「正確」選項。

也就是說,如果計算佔用相當數量的總運行時間,性能方面將非常重要,這在實踐中是不尋常的。另一方面,還有其他一些因素會影響甚至決定你的決定:

正確性:如果你做了兩次計算,應用程序狀態在兩次計算之間可能會發生變化。所以你會進入一個分支,因爲例如get_something() > 5但在分支內部可能是get_something() <= 5,因爲其他人在此期間修改了數據。這對你有影響嗎?您希望應用在這種情況下表現如何?這些問題比「運行速度會更快」還重要得多。

可理解:每當我看到一個變量被定義,我通常直到我想通了函數如何它的作品作爲一個整體被定義爲一個「精神插槽」分配給追蹤變量及其用法。如果代碼使用的臨時數太多,那麼讀者的認知負荷就會增加。這對你有影響嗎?相對於性能差異的影響是什麼?

0

如果計算在每次調用時有不同的參數,因此結果不同,那麼每次都需要調用它。例如:

function add(a, b) 
{ 
    return a + b; 
} 

並稱爲像這樣:

if(add(1, 2) > a) 
else if (add(4,5) > c) 

這將每次返回不同的值,所以你需要計算它的如果。

然而,如果它是每次進行相同的比較值,能夠更好地存儲結果如果使用多於一次:

result = add(5, 6) 

if(result > 10) 
else if(result > 12)