Dans nombre de langage de programmation fonctionnel, il est courant de manipuler des collections et d'appliquer des closures aux membres de la collection.

Un exemple avec Groovy [1] , un langage ciblant la JVM Java :

[ 1, 2, 3, 4, 5 ].each { x -> println x*x }
[ 1, 2, 3, 4, 5 ].collect { x -> x*x }

La dernière ligne produit très naturellement la collection :

[1, 4, 9, 16, 25].

En AS3 on a un support équivalent. Quoi qu'un peut moins elliptique.

Array.forEach() [2]

[1, 2, 3, 4, 5].forEach( traceSquare);
private function traceSquare( x:*, index:int, arr:Array):void {
  trace( "" + x*x);
}

Ceci produit vient la même sortie que la ligne groovy avec each{}.

Array.map() [3]

[1, 2, 3, 4, 5].map( square);
private function square( x:*, index:int, arr:Array): * {
  return x*x;
}

Quand le traitement est court comme ci-dessus, on peut aussi opter pour une définition inline, comme suit :

[1, 2, 3, 4, 5].map( function( x:*, index:int, arr:Array):* { return x*x } );
}

Solution de un-marshalling JSON avec closure Array.map()

Nombre de web services offrent un format Json. Le service de feeds de delicious en est un exemple : http://feeds.delicious.com/v2/json/tags/coutant .

{ "flex": 120, "blazeds": 8, . . .}

Il peut être intéressant de convertir cette réponse Json directement en un array d'objets AS3 représentant un tag (avec son nombre d'occurrence comme propriété). Ceci peut être fait simplement :

tagsAsJson.split(",").map( function( item:*, index:int, arr:Array):Tag { return new Tag(item) } );