views:

57

answers:

2

I've been using Object as a way to have a generic associative array (map/dictionary) since AS3/Flex seems to be very limited in this regard. But I really don't like it coming from a C++/Java/C# background. Is there a better way, some standard class I've not come across... is this even considered good/bad in AS3?

+5  A: 

Yes, Actionscript uses Object as a generic associative container and is considered the standard way of doing this.

There is also a Dictionary class available, flash.utils.Dictionary.

The difference is that Dictionary can use any value as a key, including objects, while Object uses string keys. For most uses, Object is preferred as it is faster and covers the majority of use cases.

You can see the details on Object here: http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/Object.html and Dictionary here: http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/utils/Dictionary.html and the differences between them here: http://livedocs.adobe.com/flex/3/html/help.html?content=10_Lists_of_data_4.html

Alan Geleynse
Is flash.utils available to Flex applications?
John
Yes it is, I just tested it in Flex Builder 3 and it is available. I also added another link that describes the differences between them in more detail.
Alan Geleynse
+2  A: 

I'm afraid there's no native alternative to Object or Dictionary for maps and other structures. As for standard, well, it depends on how one defines standard, but there are a couple of known libraries that you might like to check out if you look for Java style collections.

Like this one:

http://sibirjak.com/blog/collections/as3commons-collections/

Also, you could take a look at this question, that has links to a couple of ds libraries (including the above one).

http://stackoverflow.com/questions/979489/collections-in-adobe-flex

I wouldn't say using Objects is either good or bad practice. In the general case they are faster than any Actionscript alternative (since they are native), but less featured. Sometimes the provided functionality is good enough. Sometimes, it's a bit bare-bones, so something more structured could help you getting rid of lower level details in your code and focusing in your "domain logic", so to speak.

In the end, all of these libraries implement their data structures through Objects, Dictionaries and Arrays (or Vectors). So, if the native objects are fine for your needs, I'd say go with them. On the other hand, if you find yourself basically re-writting, say, an ad-hoc Set, perhaps, using one of these libs would be a wise choice.

Juan Pablo Califano
Thanks. I would not really want to use some 'random' library unless it is a de facto standard, like Apache Commons in Java... I might as well work on my own.
John