Enumerations 與類別

Enumerations 是您建立的自訂資料類型,以封裝一小組值。ActionScript 3.0 不支援特定列舉功能,跟 C++ 及其 enum 關鍵字或 Java 及其 Enumeration 介面都不同,但是您可以使用類別和靜態常數建立列舉項目。例如,Flash Player API 中的 PrintJob 類別使用名為 PrintJobOrientation 的列舉項目,儲存一組由 "landscape""portrait" 組成的值,如下列程式碼所示:

public final class PrintJobOrientation
{
    public static const LANDSCAPE:String = "landscape";
    public static const PORTRAIT:String = "portrait";
}

依照慣例,enumeration 類別是以 final 特質宣告,因為不必再擴充該類別。此類別僅包含靜態成員,也就是說,您不建立類別的實體,而是直接透過類別物件存取列舉值,如下列程式碼摘錄所示:

var pj:PrintJob = new PrintJob();
if(pj.start())
{                
    if (pj.orientation == PrintJobOrientation.PORTRAIT)
    {
        ...
    }
    ...
}

Flash Player API 中所有 enumeration 類別都只包含 String、int 或 uint 類型的變數。使用 enumeration 而不用常值字串或數字值的優點是使用 enumeration 時很容易找出拼寫錯誤;如果 enumeration 名稱有打字錯誤時,ActionScript 編譯器會產生錯誤。若使用常值,如果一個字的拼法不正確,或使用的數字錯誤,編譯器不會報告。在上一個範例中,如果 enumeration 常數的名稱不正確,編譯器就會產生錯誤,如下列摘錄所示:

    if (pj.orientation == PrintJobOrientation.PORTRAI) // 編譯器錯誤

但是,如果字串常值的拼寫錯誤,則編譯器不會產生錯誤,如下所示:

    if (pj.orientation == "portrai") // 沒有編譯器錯誤

第二種建立 enumeration 的技巧也包含用 enumeration 的靜態屬性另外建立類別。這種技巧的差別在於:每一個靜態屬性都包含類別的實體,而不包含字串或整數值。例如,下列程式碼會為星期中的日期建立 enumeration 類別:

public final class Day
{
    public static const MONDAY:Day = new Day();
    public static const TUESDAY:Day = new Day();
    public static const WEDNESDAY:Day = new Day();
    public static const THURSDAY:Day = new Day();
    public static const FRIDAY:Day = new Day();
    public static const SATURDAY:Day = new Day();
    public static const SUNDAY:Day = new Day();
}

Flash Player API 不使用這項技巧,但很多開發人員喜歡它所提供的改良類型檢查,因此都會使用這項技巧。例如,傳回列舉值的方法可以將傳回值限定於 enumeration 資料類型。下列程式碼不但示範會傳回星期別的函數,也示範使用 enumeration 類型做為類型附註的函數呼叫:

function getDay():Day
{
    var date:Date = new Date();
    var retDay:Day;
    switch (date.day)
    {
        case 0:
            retDay = Day.MONDAY;
            break;
        case 1:
            retDay = Day.TUESDAY;
            break;
        case 2:
            retDay = Day.WEDNESDAY;
            break;
        case 3:
            retDay = Day.THURSDAY;
            break;
        case 4:
            retDay = Day.FRIDAY;
            break;
        case 5:
            retDay = Day.SATURDAY;
            break;
        case 6:
            retDay = Day.SUNDAY;
            break;
    }
    return retDay;
}

var dayOfWeek:Day = getDay();

您也可以加強 Day 類別,讓它將整數與星期中的每一天相關聯,然後提供傳回代表各天之字串的 toString() 方法。您可能需要用這種方式加強 Day 類別做為練習。


Flash CS3

 

有新的意見加入至這個頁面時,傳送電子郵件給我 | 意見報告

目前頁面: http://livedocs.adobe.com/flash/9.0_tw/main/00000065.html