Enumerazioni con classi

Le enumerazioni sono tipi di dati personalizzati creati per incapsulare un piccolo gruppo di valori. ActionScript 3.0 non supporta una funzionalità di enumerazione specifica, a differenza di C++, che presenta la parola chiave enum, o di Java, che ha un'interfaccia di enumerazione propria. È tuttavia possibile creare enumerazioni mediante le classi e le costanti statiche. Ad esempio, la classe PrintJob nell'API di Flash Player impiega un'enumerazione chiamata PrintJobOrientation per memorizzare il set di valori che comprende "landscape" e "portrait", come illustrato nel codice seguente:

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

Per convenzione, una classe di enumerazione viene dichiarata con l'attributo final in quanto non vi è necessità di estendere la classe. La classe comprende solo membri statici, di conseguenza non si potranno creare istanze della classe. Al contrario, è possibile accedere ai valori di enumerazione direttamente tramite l'oggetto di classe, come illustrato nel seguente estratto di codice:

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

Tutte le classi di enumerazione nell'API di Flash Player contengono solo variabili di tipo String, int o uint. Il vantaggio di utilizzare enumerazioni anziché stringhe di caratteri o valori numerici è che gli errori tipografici sono più facilmente rilevabili nelle enumerazioni. Se si digita in modo errato il nome di un'enumerazione, il compilatore di ActionScript genera un errore. Se si usano valori letterali, il compilatore non rileva gli errori ortografici o l'uso di un numero errato. Nell'esempio precedente, se il nome della costante di enumerazione non è corretto, il compilatore genera un errore, come illustrato nell'estratto seguente:

    if (pj.orientation == PrintJobOrientation.PORTRAI) // errore del compilatore

Tuttavia, il compilatore non genera un errore se la stringa di caratteri digitata contiene un errore ortografico, come nel caso seguente:

    if (pj.orientation == "portrai") // nessun errore del compilatore

Una seconda tecnica per la creazione di enumerazioni prevede anch'essa la creazione di una classe separata con proprietà statiche per l'enumerazione. Ciò che differenzia questa tecnica, tuttavia, è che le proprietà statiche contengono un'istanza della classe anziché una stringa o un valore intero. Ad esempio, il seguente codice consente di creare una classe di enumerazione per i giorni della settimana:

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();
}

Questa tecnica non viene utilizzata dall'API di Flash Player, ma è impiegata da numerosi sviluppatori che ne apprezzano in particolare la funzionalità di verifica tipi ottimizzata. Ad esempio, un metodo in grado di restituire un valore di enumerazione può limitare il valore restituito al tipo di dati dell'enumerazione. Il codice seguente mostra una funzione in grado di restituire non solo un giorno della settimana, ma anche una chiamata a una funzione che impiega il tipo dell'enumerazione come annotazione di tipo:

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();

È inoltre possibile ottimizzare la classe Day in modo che a ogni giorno della settimana venga associato un numero intero e fornire un metodo toString() che restituisca una rappresentazione del giorno sotto forma di stringa. È possibile migliorare in questo modo la classe Day come esercizio.


Flash CS3

 

Inviami un messaggio e-mail quando vengono aggiunti dei commenti a questa | Rapporto sui commenti

Pagina corrente: http://livedocs.adobe.com/flash/9.0_it/main/00000065.html