布林變數,在電腦的世界中就是 0(false) 與 1(true) 的值(或者為 -1 與 1)
我們在做條件判斷時,常會使用到,或者是透過函式來傳回運算的結果為真或偽。
我們最簡單的作法,通常是設定一個 Boolean 變數,來承接我們程式中的條件判斷,並以此變數來做為我們程式的控制邏輯,但是這樣做就夠了嗎?
(雖然今天還是沒有得到任何機會的獎品,不過這正是燃起明天無比希望的動力 b)
好了,不囉嗦,進入主體。
.使用布林變數作為程式的註解
其實布林變數用得好,是可以提高程式的可讀性的!
如以下的例子:
if (ElementIdx<0) or (Max_Elements < ElementIdx) _
or (ElementIdx=LastElementIdx) then
...
end if
就程式的邏輯而言,很清楚,但是就可讀性而言,就很難理解這是要做什麼判斷的。
如果改成如下的寫法:
Finished=(ElementIdx<0) or (Max_Elements < ElementIdx)
RepeatedEntry=(ElementIdx=LastElementIdx)
if Finished or RepeatedEntry then
...
end if
這樣在閱讀上,就比較容易理解,而且也不用多花力氣去註解囉!
.使用布林變數來簡化複雜的測試
布林變數真的很簡單,可是當簡單的東西很多很複雜的時候,可就變成棘手的問題了。
我在寫 Workflow 的程式的時候,最怕的就是邏輯的條件設定了,常常都會漏掉,
或者是想到頭腦打結。
尤其是以前都將邏輯直接寫在流程的判斷條件上,每次修改條件,流程就會多一個版本出來,
不僅維護不易,流程的管理上也變得很複雜。
後來我都將流程的邏輯單純化,在流程上僅設定布林變數來的判斷流程路徑要往哪邊走,
將布林變數的運算寫在表單當中,將運算的結果告訴流程,流程自己就會決定往哪條路徑走;
當我的條件變更的時候(如核決權限表修改),我就不需要改變流程了。
我們以底下這個例子來說明,一個流程的條件判斷式:
' 流程的判斷
if (dep_id="部門 A" and ((TotalAmount>5000000 or (ApproverLevel>="3" and TotalAmount<=5000000) or (ApproverLevel>="2" and TotalAmount<=3000000))) or (dep_id="部門 B") or _
(ApproveStatus<>"no" and ApproverLevel>="1" and TotalAmount<=1000000) or _
(ApproveStatus<>"no" and ApproverLevel>="2" and TotalAmount<=3000000) or _
(ApproveStatus<>"no" and ApproverLevel>="3" and TotalAmount<=5000000) or _
(ApproveStatus<>"no" and ApproverLevel="4") then
' Next Step
else
' Return
end if
如果改成底下的方式,在表單中將邏輯運算準備好:
' 假設 a, b 個代表部門 A, B 的權限設定
' 部門 A 權限
a=(dep_id="部門 A" and ((TotalAmount>5000000 or (ApproverLevel>="3" and TotalAmount<=5000000) or (ApproverLevel>="2" and TotalAmount<=3000000)))
' 部門 B 權限
b=(dep_id="部門 B")
'其他部門
otrs=(ApproveStatus<>"no" and ApproverLevel>="1" and TotalAmount<=1000000) or (ApproveStatus<>"no" and ApproverLevel>="2" and TotalAmount<=3000000) or (ApproveStatus<>"no" and ApproverLevel>="3" and TotalAmount<=5000000) or (ApproveStatus<>"no" and ApproverLevel="4")
ispassed=(a or b or otrs)
將邏輯運算的結果,交給流程
' 流程的判斷
if ispassed then
' Next Step
else
' Return
end if