當編寫一個if語句,我總是需要像時使用And
:哪種性能更好?和VS AndAlso
If 1=1 And 2=2 Then
我用過AndAlso
唯一的一次是,如果第二個條件將錯誤,如果第一心不是真正的喜歡:
If Not IsDbNull(Value) AndAlso Value=2 Then
然而,最近我聽說AndAlso
是性能比And
更好,因爲當第一個是真正的第二個條件是隻讀的。
在這種情況下,我就應該總是隻使用AndAlso
?
當編寫一個if語句,我總是需要像時使用And
:哪種性能更好?和VS AndAlso
If 1=1 And 2=2 Then
我用過AndAlso
唯一的一次是,如果第二個條件將錯誤,如果第一心不是真正的喜歡:
If Not IsDbNull(Value) AndAlso Value=2 Then
然而,最近我聽說AndAlso
是性能比And
更好,因爲當第一個是真正的第二個條件是隻讀的。
在這種情況下,我就應該總是隻使用AndAlso
?
是的,AndAlso
可能比And
更快,因爲如果先前的條件證明是錯誤的,它不會評估後續條件。
And
是一種倒退到較早版本的Visual Basic。
大多數(我毫不猶豫地說全部)現代語言使用進行評估不嚴格需要短路條件布爾運算符。
例如&&
用於C風格語言的運算符和運算符的全部性能爲AndAlso
。
如果您有大量使用And
和Or
的代碼,那麼全局搜索和替換可以更改現有行爲,如果第二個條件涉及具有副作用的函數調用,請務必小心。
當條件也起到我寧願使用AndAlso
和OrElse
除非您特別需要通過And
& Or
從C和C++背景到VB(最初是V5),VB的and
和or
沒有短路,總是很煩人。所以第二個表達式依賴於第一個表達式的情況總是很難寫出來。
我不希望看到太多的性能提升大部分時間,除非第二個表達式有顯著的開銷,短路運營商將避免執行它,從而加速東西。
但是,如果第二個表達式是一個重要的開銷,那麼我會擔心只會有時會執行的副作用—這會使未來的維護變得更困難,並且可能會使正確性難以維護。
提供的功能:
If functionA() And functionB() Then
...
public shared functionA() As Boolean
IF A is false THEN log -> return true or false
...
public shared functionB() As Boolean
IF B is false THEN log -> return true or false
使用AndAlso
這裏可能是錯誤的路要走,因爲那時它只會在A和B都爲假時記錄B.
乾杯您的答覆。從現在開始,我會確保使用AndAlso&OrElse而不是舊的And&Or! – Curt