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) } );
Notes
[1] http://groovy.codehaus.org/Quick+St...
[2] AS Doc Array.forEach(.) : http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/Array.html#forEach()
[3] AS Doc Array.map(.) : http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/Array.html#map()


