2012-09-04 67 views
-3

我希望大家都會喜歡讀這本書。將IF語句轉換爲簡單語句 - 哪一個是有效的?

我有兩個IF下面

public int GetTax(Item item) 
{ 
    int tax=0; 
    if(item.Name.Equals("Book")) 
    { 
     tax = 10; 
    } 
    if(item.Imported) 
    { 
     tax += 5; 
    } 
    return tax; 
} 

語句我已經轉換上面如果條件此。

public int GetTax(Item item) 
{ 
    return 5 * ((int)item.Name.Equals("Book") * 2 + ((int)item.Imported)); 
} 

哪一個你認爲有效?並證明爲什麼?

+2

「我希望大家都會喜歡讀這篇文章」 - 我沒有。 – duffymo

+4

在上述情況下,我沒有看到性能問題。但是混淆你的意圖是不好的。編寫可讀代碼,除非*真的*需要像上面那樣的優化。在這種情況下,請徹底記錄下來。 – Endy

+4

你確定兩者會給出相同的輸出嗎? – daryal

回答

1

如果從字面上編譯第二種方法效率更高,因爲沒有分支。

每當出現分支時,就會有一些分支預測出錯,從而導致CPU重新執行機器指令。

話雖如此,根據編譯器,你寫的東西可能很簡單,它可以優化到等效代碼。這取決於你所說的返回類型。如果返回類型是布爾值,則它們是等價的。

但是,如果例如,item.Imported實際上是整數類型,那麼您給出的兩個示例是不等價的,編譯器可能不會編譯兩個相同的東西。

因爲優化是非常依賴編譯器的。如果重要的是儘量減少運行時間,那麼只有當你知道基準的代碼。