2017-08-21 68 views
0

以下一段代碼的最佳做法是什麼?最佳實踐:如果樹或'Early Out'

If Condition = False Then End 
' Rest of my code. 

OR

If Condition = True Then 
    'Rest of my code. 
Else 
    End 
End if 

如果條件沒有在我的代碼實現,我不想無謂地運行所有的我的代碼。如果在我的代碼上面使用If語句來阻止它在Condition不被滿足的情況下運行,或者更好地使用更充實的If語句來處理這個問題,那麼是否更好?

後一段代碼在技術上並不要求'結束',它只是繞過了我的代碼的執行。

+2

這取決於和自以爲是。 –

+0

我知道沒有硬性規定,但是在這個問題上沒有最佳做法嗎?例如,我讀過Early Out代碼在函數中很好,這同樣適用於你的主模塊嗎? – Nicolas

+0

這確實是主觀的,你的例子太單純了,無論如何都不能說明情況。 *很多嵌套級別可以被認爲是[Arrow Anti-Pattern](http://wiki.c2.com/?ArrowAntiPattern) –

回答

0

我會說這取決於變量的類型Condition。這可能起初看起來相同,但前提是我們假設Condition的類型爲Boolean,這裏沒有定義。

  1. 如果類型爲Boolean
    然後,它是由你選擇哪一個。兩者都是安全的,我會說這是基於意見的,你更喜歡哪一個。

  2. 如果類型是Boolean
    對於Condition是例如類型爲LongInteger,並且其值不是0(意思是false)而不是-1(意思是true),例如對於Condition = 1它們的行爲不同。該...

    • 第一個解決方案將運行代碼
    • 但第二個解決方案將結束代碼的其餘部分。
0

這樣認爲:至極條件是最有可能經常發生(true或false)。並且比你在你的代碼中使用這個條件。所以當你的sub \函數運行時,它將不得不採取較少的代碼。

或者換句話說:如果有條件,那麼A else B, 如果發生的次數比B多,那麼一定要先放置A代碼,這樣代碼會更快。