How To - Case常見的各種使用法

還沒開課就有朋友異曲同工的問我這個問題:

有很多狀況會用到Case,但是根據許多不同的狀況,實在搞不清楚到底如何使用Case才能比較有效率。

在這邊我們先來看常用的方式:




以上標準的三種資料型態都可以作為Case的判斷條件。
以布林代數而言,判斷只有 T/F 兩種狀態,十分好理解。

而數值也可以當作判斷條件:
使用上除了注意不能輸入浮點數之外,同樣的在數值的範圍定義上也要小心溢位的狀況發生。此外設定各種數值時,別忘了要預留 Default 的條件,程式會自動判斷設定的條件是否滿足封閉條件,若不滿足會無法執行程式,主要避免當輸入一個不符合任一條件的參數時,程式會無法執行。

當然也可以將 Ring 的元件作為判斷條件,因為 Ring 本身就是整數值,使用上跟單純數值差不多,唯一方便的是不用擔心是否溢位,因為 Ring 的選項已經被定義好了。

此外更方便的是可以使用Enum作為輸入判斷條件:
Case會自動擷取 Enum 的名稱作為 Case 的名稱,而且當所有 Case 條件與 Enum 相等時,其實可以不用設定 Default 條件,這個又是比 Ring 更加方便的地方。
但是如果 Enum 的條件數量比 Case 來的多,則還是要給定 Default 條件:
否則程式依舊無法執行。
另,這篇文章已經說明:
"如何針對不同區間的數值做不同的輸出"
如果有需要的朋友可以同步參閱。

文字也可以當作判斷條件,同樣的要注意,文字也需要 Default 條件,否則程式無法執行。

比較少人知道的是,如果當你的輸入可能是TEST_1、TEST_2...TEST_N,都需要對應到相同的Case時,其實可以跟數值一樣利用範圍設定的方法達成。
以上面的敘述為例,你只需要給定一個條件是  "TEST_"..  ,則只要字首帶有"TEST_"的敘述都會進到這個判斷頁面。

當然如果是使用Error Cluster,也可以直接接入Case:



Case會預設變成 Error 或是 No Error 的判斷式,方便在架構程式時留下發生錯誤時,可以讓程式自動採取應對手段。

以上是 Case 常見的各種使用法,若在搭配上 For/While Loop ,就能非常的有效率進行許多非分類器的設計!
針對此篇若有其他的疑問也歡迎提出來討論喔!