iT邦幫忙

DAY 6
2

程式設計心法系列 第 6

程式設計心法:5.資料型別--布林變數

  • 分享至 

  • xImage
  •  

布林變數,在電腦的世界中就是 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

本系列文章


上一篇
程式設計心法:4.資料型別--字元與字串
下一篇
程式設計心法:6.資料型別--列舉型別
系列文
程式設計心法31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
海綿寶寶
iT邦大神 1 級 ‧ 2009-10-12 13:10:04

布林布林
唸快一點就變成Bling Bling了..

jamesjan iT邦高手 1 級 ‧ 2009-10-12 16:46:11 檢舉

看到錢我的眼睛也會 Bling Bling $_$

我要留言

立即登入留言