BOO大全/列舉

维基教科书,自由的教学读本

上一章:介面 目錄 下一章:值型別


列舉[编辑]

有時候我們會需要一組常數來描述狀態。舉例來說,電視可能是關著的、開著的或者是在休眠狀態。當然,你知道更好的方法是使用常數來取代 Magic number

class TvState:
	static final Off = 0
	static final On = 1
	static final Standby = 2

這是個好方法,只是要打太多字了。列舉(Enumeration的縮寫:Enum)會是個更適合的方法,它建立了一個新的型別,裡面有特定值的定義。

enum TvState:
	Off
	On
	Standby

state = TvState.Off
print "state was",state

輸出結果

state was Off

列舉值知道如何適當的表達自己,這也是你看到 "Off" 的原因。你也可以從字串轉回列舉值,方法是使用 Enum.Parse,如果字串並不是列舉所定義的其中一個值,那麼將會提出例外。

>>> import System
>>> t = Enum.Parse(TvState,"Off")
Off
>>> t.GetType()
TvState

雖然列舉用來定義型別而且可以放在類別外面,但他們通常還是被放在類別裡面,因為大多情況下這些特定的列舉值由於用途的關係,只適用在類別裡。

class TvController:
	enum TvState:
		Off
		On
		Standby
		
	[property(State)]
	_state as TvState

	def ResetState(state as TvState):
	...

除了上面所提到的好處之外,另外一個好處是列舉本身就已經描述值的用途。舉例來說,如果使用 def ResetState( state as int ),我們無法得知 state 的整數值應該是什麼,我們必須依靠註解才有可能得知其正確值為何。


上一章:介面 目錄 下一章:值型別