OrElse 運算子和AndAlso 運算子

        在 VB.NET 中,一般的判斷式都會使用到 Or 及 And 運算子,可是比較少人知道它們還有二個相對應的 OrElse 及 AndAlso 運算子。一般而言,筆者會建議所有的判斷式都使用 OrElse 來取代 Or 運算子,使用 AndAlso 來取代 And  運算子。為什麼呢?因為 OrElse 及 AndAlso 運算子的執行效能會優於 Or 及 And 運算子,以下就來說明其中的原由

OrElse 運算子

意義:對兩個運算式執行最少運算 (Short-Circuiting) 內含邏輯分離 (Logical Disjunction)。

result = expression1 OrElse expression2

使用 OrElse 運算子來結合多個判斷式時,它會由前至後逐一評估每個判斷式的結果,當判斷過程中有其中一個判斷式為 True 時,它就會略過後序的判斷式,直接傳回 True。也就是當 expression1 的評估結果為 True 時,expression2 就不會再去評估結果,當 OrElse 結合的判斷式愈多時,更會突顯出它的執行效能優勢。

我們來看看下面的程式碼,同樣的判斷式分別使用 Or 及 OrElse 結合運算子。

Dim oArray As ArrayList '未使用 New 建立物件執行個體   
        Dim bResult As Boolean

        
'And とAndAlso が 異なる
        '會發生錯誤,因為 oArray 為 Nothing,不能直接使用它的 Count 屬性   
        bResult = (Not oArray Is NothingAnd (oArray.Count > 0)

        
'不會發生錯誤,因為第一個判斷式為 False 即傳回 False,後序的判斷式不評估   
        bResult = (Not oArray Is NothingAndAlso (oArray.Count > 0)

上面的程式碼中,若使用 And 運算子會發生錯誤,因為 (oArray IsNot Nothing) 及 (oArray.Count > 0) 二個判斷式會同時被評估,而這樣的程式碼很容易發生錯誤;因為一但 oArray 為 Nothing 時,後面的  (oArray.Count = 0) 一定會發生錯誤。上述使用 And 運算子的判斷式,要修正如下才是正確的。

但使用 AndAlso 運算子就沒有這個困擾了,因為當 (oArray IsNot Nothing) 為 False 時,它就會馬上傳回 False,後面的 (oArray.Count > 0) 根本不會被評估;因為後面的判斷式為 True 或 False 都不會影響結果,所以 AndAlso 可以執行最少運算邏輯交集運算,當然執行效能上相對好。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章