Sok modern programozási nyelvben, így AS3-ban is használhatjuk az úgynevezett rest paramétert függvények definiálásakor. Nagyon hasznos dolog, mert nem kell előre gondolnunk a lehetséges paraméterekre, tisztább kód hozható létre vele, mindössze egy tömböt kell lekezelnünk a függvényen belül, amiben az összes “további” paraméter benne van. Például:
function elemLista(...items):void{
for( var i:int = 0; i < items.length; i++){
trace("Elem: ", items[i]);
}
}
elemLista(”A”,”B”,”C”, 1, 2, 3);
Kimenet:
Elem: A
Elem: B
Elem: C
Elem: 1
Elem: 2
Elem: 3
Nagyon hasznos dolog, amint látható én gyakran használom.
Egy moduláris program interfészén dolgoztam, amikor szembejött egy probléma ezzel kapcsolatban. Mi van, ha egy tömböt akarok így, végtelen paraméterszerűen átadni a végtelenszámú argumentumot fogadó függvénynek?!
Nos, ha a tömböt közvetlenül adom át: elemLista(tomb:Array) az nem fog menni.
Viszont egy kis objektumorientált trükközéssel megoldható a probléma. Használjuk az apply metódust. Hülyén hangzik, de az OO programozásban minden objektum, így a függvényhívást, vagyis a függvényt magát is tudjuk objektumként kezelni. A következőt kell tennünk:
function elemLista(...items):void{
for( var i:int = 0; i < items.length; i++){
trace("Elem: ", items[i]);
}
}
var lista:Array = new Array(”A”,”B”,”C”, 1, 2, 3);
elemLista.apply(this,lista);
Kimenet:
Elem: A
Elem: B
Elem: C
Elem: 1
Elem: 2
Elem: 3
Papaam! Már működik is. Nos, nekem ez egy óra kutakodásba került, remélem a kedves olvasó gyorsabban megtalálja