ActionScript, ActionScript 2, ActionScript 3, Tutorials

Actionscript getters setters VS public vars: cosa sono, come e quando si usano

Anche un newbie di actionscript sa cosa significa questa riga di codice:

var myInstance:MyClass = new MyClass();
myInstance.myVar = 1;

la propriet√† “myVar” dell’istanza di classe myInstance assume il valore 1.

Ma forse non è così immediato capire cosa può nascondere la stessa riga di codice.

public var
E’ possibile che nell’ipotetica classe MyClass di cui myInstance √® un’istanza nella mia timeline ci sia effettivamente una variabile pubblica di nome “myVar”, di tipo Number (AS2AS3) o intuint (AS3) come mostrato dal codice qui sotto

class MyClass{
public var myVar:Number;
}

In questa situazione la variabile myVar √® accessibile, veloce ma accessibile…forse troppo accessibile.
Poniamo il caso che si verifichi la situazione per cui erroneamente venisse associato a myVar un valore di tipo errato…

var myInstance:MyClass = new MyClass();

myInstance.myVar = "ciao";

..si genererebbe un errore grossolano…
Ecco uno dei motivi principali per cui esistono i cosiddetti “getters” o “setters”.

getters setters
Sicuramente alla maggior parte di chi sta leggendo questo articolo su FlashFuck sarà capitato di incappare su del codice simile a questo

//Void AS2 | void AS3
private var _myVar:Number;
public function set myVar (n:Number):void{
_myVar = n;
}
public function get myVar ():Number{
return _myVar ;
}

Questo tipo di approccio permette di gestire con le due funzioni get e set il recupero e l’assegnazione di dati alla variabile privata _myVar.

In termini di utilizzo non cambia nulla, si potrà continuare ad usare la notazione

var myInstance:MyClass = new MyClass();
myInstance.myVar = 1;

per assegnare il valore alla variabile.. (solo che in questo caso il valore viene assegnato alla variabile privata _myVar, mentre myVar è solo il nome del gettersetter)

In termini di controllo del codice l’utilizzo di get e set √® notevolmente migliore rispetto all’utilizzo di una variabile pubblica,
tuttavia in termini di prestazioni una variabile pubblica √® notevolmente pi√π veloce di una funzione (non dimentichiamo che get e set sono appunto delle funzioni, quindi richiedono l’allocazione di pi√π memoria).

Quindi, quando usare get e set al posto di una variabile pubblica?
La risposta √® presto detta anche se piuttosto banale: quando se ne richiede l’uso.

  • se √® possibile che il codice generi degli errori dovuti all’assegnazione di valori ambigui ad una variabile…
  • se √® necessario che all’assegnazione del valore venga eseguita qualche altra funzione…
  • se √® necessario eseguire il dispatch di un evento…

potrebbe rendersi preferibile l’uso dei gettersetter piuttosto che utilizzare variabili pubbliche…

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s