2013-05-06 43 views
2

這不是一個家庭作業問題,這個問題是與我的朋友進行另一次討論的結果。哪一個更好:if-elif-else或if-else

我搜索了很多,但沒有找到任何可靠的來源,建立了正確的推理的答案,所以在這裏我在程序員的麥加。

其中的編碼通過以下兩種方式更好:

if(a) 
{ 
    if(b) 
    .... 
    else if(c) 
    .... 
} 

if(a && b) 
... 
else if(a && c) 
... 

我搜查,發現http://en.wikipedia.org/wiki/Cyclomatic_complexity是有用的,但還是沒能辨認出最後的選擇。

請提供相關推理。

乾杯!

+0

按性能來看;在使用其中任何一項的情況下,您幾乎不會獲得任何顯着的性能提升。恕我直言,這只是一個可讀性的東西,你應該關心。沒有其他的。 – viral 2013-05-06 10:11:18

+1

請用'&&'替換'&',或者您是否真的指'&'?你也可以添加一個關於使用的編程語言的標籤 – 2013-05-06 10:14:26

+0

@vlad_tepesch如果你可以請再看一遍,改變問題的方法。 – Harshdeep 2013-05-06 10:30:58

回答

1

過時由於問題改變

可能不相同,因爲如果(B)嵌段可以改變一個。

如果條件中的所有變量都是恆定的,那麼編譯器可能會輸出相同的代碼,以避免第二個變體的附加操作變爲

額外的&也是我更喜歡第一個變體的原因。

+0

他改編了這個問題,我的回答現在已經過時了 – 2013-05-06 10:44:15

+0

+1。 – 2013-05-06 13:08:58

0

第一個可能讓比較少,因爲它比較一個只有一次,但第二個會一直比較兩次B和C一旦

0

顯然,如果(一)...然後若B ...你可以認爲它是分佈式的。a * b + a * c = a *(b + c)或樹木建築。是 - 否 - 否,是 - 否 - 是,等等。你知道你的邏輯是好的,當你可以很容易地構建這三個,否則你必須重新思考你的邏輯。

1

在我的編碼體驗中,它取決於點的內容。如果只有一行或幾行代碼,我更喜歡2nd。不過,如果還有更多,我會使用1st塊。

2

我認爲沒有優化的第一種方法應該會更快。

由於在第1種方法,你檢查a一次然後將其bc。如果b是false那麼有3個檢查(比較)。

但在第二你檢查a兩次如果bfalse(如果一旦btrue)。如果b爲假,將會有4個檢查。但編譯器可能會將兩者優化爲相同。

+3

我認爲(假設'a'是布爾函數,而不是函數),這是* micro *優化的一個完美例子,最有可能給任何非平凡程序帶來* no *明顯的性能提升。這更多關於[標籤:編碼風格]。 – Dukeling 2013-05-06 10:54:31

0

幾乎他們不是時間順序差異或任何想法。 它們之間的區別與你的代碼架構師和你的願景完全相關。例如,如果A的條件是中繼器,我建議第一種方式,否則我更喜歡簡單的代碼,如第二種方式,因爲這很容易閱讀和繼續。其他發展更熱心幫助你。