17. Metodi get e set
I metodi get e set, sono dei metodi particolari, poichè ci consentono di definire un attributo su cui avremo il pieno controllo per ogni operazione di scrittura e lettura.
Non è obbligatorio definire entrambi i metodi, ActionScript 3 ci permette di definire solo il metodo di cui abbiamo bisogno, consentendo ovviamente solo operazioni di lettura qualora avessimo definito get, o solo operazioni di scrittura qualora avessimo definito solo set.
Per dichiarare uno di questi metodi, è sufficiente anticipare il nome del metodo con una delle due direttive get o set.
EsempioSupponiamo di voler disporre di un attributo nella nostra classe con il compito di memorizzare solo numeri interi maggiori o uguali a zero. Dovremmo ricordarci di effettuare un casting al tipo di dato int ogni volta che assegniamo un valore a questo attributo, controllando inoltre che il valore ricevuto sia maggiore maggiore o uguale a zero, scrivendo più righe di codice che saranno anche più soggette ad errori, poichè è facile dimenticare di effettuare una conversione esplicita quando ci sono parecchie assegnazioni da fare. Vedremo ora un esempio pratico dove una classe "MiaClasse" definirà questi due metodi speciali per risolvere il problema pocanzi esposto. |
MiaClasse.as
package
{
public class MiaClasse
{
private var numero:int;
public function MiaClasse():void
{
this.numero = 0;
}
public function get mionumero():int
{ return this.numero; }
public function set mionumero(num:*):void
{
// Converte esplicitamente il nuovo valore al tipo int
num = int(num);
/* Se num è maggiore o uguale a zero assegna il valore
all'attributo numero, altrimenti assegnalo a zero */
this.numero = (num >= 0) ? num : 0;
}
}
}I due metodi dell'esempio soprastante ci consentiranno di gestire uno pseudo-attributo con il nome di mionumero. Nota che il nome del vero attributo che memorizzerà il valore (numero), è privato per evitare incidenti, in modo che sia possibile gestirlo solo attraverso i metodi get e set. Inoltre il suo nome (numero) è diverso da quello dello pseudo-attributo dichiarato attraverso get e set, per evitare di ricevere errori in fase di compilazione su un conflitto per la duplicazioni dei nomi. Di seguito un esempio con la classe documento HelloWorld. |
HelloWorld.as
package
{
import MiaClasse;
import flash.display.MovieClip;
public class HelloWorld extends MovieClip
{
public function HelloWorld():void
{
var istanza:MiaClasse = new MiaClasse();
istanza.mionumero = "56.7";
trace(istanza.mionumero); // Output : 56
istanza.mionumero = true;
trace(istanza.mionumero); // Output : 1
istanza.mionumero = 77.4;
trace(istanza.mionumero); // Output : 77
istanza.mionumero = 14;
trace(istanza.mionumero); // Output : 14
}
}
}- Linguaggi:

