En fouillant un peu dans les sources du framework Flex, j’ai été intrigué il y a quelques semaines de découvrir des signatures de fonctions assez étranges. J’ai finalement pris le temps de me documenter à leur sujet.

public class Objet {
 
	private var _valeur:int;
 
	public function Objet() {
		_valeur = 0;
	}
 
	public function get valeur():int {
		return _valeur;
	}
 
	public function set valeur(x:int):void {
		_valeur = x;
	}
}

En fait, le mots clé get (respectivement set) agit comme si vous aviez ajouté une variable valeur accessible uniquement en lecture (respectivement écriture), et ces variables s’utilisent ensuite comme n’importe quel autre attribut:

var o:Objet = new Objet();
var x:int = o.valeur;
o.valeur = x + 1;

La ligne suivante est également valide, le compilateur analysera votre code pour savoir quelle fonction (get ou set) appeler selon le contexte:

o.valeur = o.valeur + 1

Vous pouvez placer autant de code que vous voulez à l’intérieur de ces fonctions, elles diffèrent des autres uniquement au moment de l’appel et vous restez donc libre de les implémenter comme vous le souhaitez.
Vous pouvez même écrire des get et set pour un attribut qui n’existe pas en réalité (si sa valeur doit être régénérée à chaque appel ça peut être utile).
En revanche vous ne pouvez pas avoir un attribut du même nom dans votre classe, autrement le compilateur ne saura pas qui fait référence à quoi.