OrElse 運運算元和AndAlso 運運算元

2021-04-14 01:04:27 字數 1406 閱讀 3050

在 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 結合運運算元。

dimoarray 

asarraylist 

'未使用 new 建立物件執行個體   

dimbresult 

asboolean

'and とandalso が 異なる

'會發生錯誤,因為 oarray 為 nothing,不能直接使用它的 count 屬性   

bresult =(

notoarray 

isnothing

) and

(oarray.count 

>0)

'不會發生錯誤,因為第乙個判斷式為 false 即傳回 false,後序的判斷式不評估   

bresult =(

notoarray 

isnothing

) andalso

(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 可以執行最少運算邏輯交集運算,當然執行效能上相對好。

Leetcode 運運算元陣列問題

給定乙個陣列,最多能劃分多少個子陣列滿足給定的要求,如滿足和為0的子陣列,滿足乘積為1的子陣列 類似的子陣列問題,通常包含兩大類思路 其二 動態規劃 map 新來的元素不斷參與計算,同時採取map儲存運算結果的下標 題目描述 給定乙個整型陣列arr,其中可能有正有負有零。你可以隨意把整個陣列切成若干...

27 2 形態學 開運算 閉運算運算元

開運算 對影象先進行腐蝕運算然後再進行膨脹運算,可以消除離散點和 毛刺 可以講兩個物體分開。閉運算 對影象先進行膨脹運算然後再進行腐蝕運算,可以填充影象中內部空洞和影象凹角點,可以把兩個鄰近的目 標連線起來。一 開運算 1 opening region structelement regionope...

Verilog 不同長度運算元運算

原文 在verilog中,乙個簡單的的運算 f d e 但是當d,e,f的長度不同時,verilog是如何綜合實現的呢?為了實驗,d,e採用3bit長度,f的長度根據不同的實驗場景重新確定。這三種運算應該是都符合同一種規則,下面實驗更多的是利用 操作來驗證這種規則。整體 如下 timescale 1...