列舉?我只知道所得稅可以使用列舉扣除額,程式設計也有這個項目嗎?
列舉(Enum)型別,就像列舉的扣除額一樣,您可以將一些設定值設成列舉型別,您的值就只限定在這些列舉出來的值當中;這樣解釋或許很抽象,我們看一個實際程式設計的畫面就可以知道。
如圖中所示,我們在判斷 ADO.Net 的 Connection State 時,就會使用到列舉型態,來判斷目前 Connection 的狀態為何,進一步做後續的判斷處理,這樣對於程式設計會容易理解許多。
在書中就提到,使用列舉型別的幾點建議:
.利用列舉型別來增進程式的可讀性
例如我們在程式中寫了一段 Code
if ChosenColor=1
對於程式的閱讀上,是不能知道這是什麼顏色的,但是如果改寫成
if ChosenColor=COLOR_RED
就很容易明白,這段程式碼的作用,也不用耗費時間做註解
.使用列舉型別增進可靠度
使用列舉型別的另一個好處,就是可以將變數的值限定在列舉的型別當中,讓 Compiler 可以知道列舉型別代表的意義,當有超出型別範圍的值出現,就會 raised error。
.利用列舉型別使程式容易修改
另一個好處,跟之前提到的魔術數字或魔術字串一樣,將寫死在程式中的數字或字串改以列舉型別的方式替代,會使程式更加容易修改,就如同我們使用全域變數一樣,但是列舉型別可以限制變數值的範圍,讓程式更加嚴謹。
.利用列舉型別取代布林變數
我們常會使用函式來做運算結果的判斷,如函式傳回值的 TRUE/FALSE,但是常常我們更想知道的是執行後的狀態,這時候布林變數就不符合我們的需求,如果改以像 Success/Warning/FataError 之類的回傳訊息,這樣會讓程式更有彈性一些。
很幸運的,在 VB.Net 中,也提供自定 enum 型別的功能,如以下寫法:
Imports System
Public Class MainClass
Private Enum Names As Integer
Norman = 1
Mike = 2
Reece = 3
End Enum
Shared Sub Main()
System.Console.WriteLine(Names.Norman.ToString & " = " & Names.Norman)
System.Console.WriteLine(Names.Mike.ToString & " = " & Names.Mike)
System.Console.WriteLine(Names.Reece.ToString & " = " & Names.Reece)
End Sub
End Class
(參考來源:http://www.java2s.com/Code/VB/Language-Basics/EnumdataDemo.htm)