I've never truly used it in anger, but I found it extremely good. It's US$250 or something last I checked.
If you're more of an IDE-type, worth checking out.
I've never truly used it in anger, but I found it extremely good. It's US$250 or something last I checked.
If you're more of an IDE-type, worth checking out.
Since Actionscript 3 has optional static typing, and contains little-documented but very real implementations of closures and functional programming, it can be written as a Java-like OO language, as a Javascript-like dynamic language, or as a clunky but at least workable functional language; and the XML-based GUI-layout component, MXML, is surprisingly powerful and consistent.
Even though Flash is where my paycheck comes from, I am not at all convinced that it is the ideal format for most web content, so I won't argue with anyone who hates it. But anyone who has avoided Flash because of its programming model should definitely give Flex a second look.
(As for Flex Builder, I use it for its debugger and compiler, while doing heavy-duty text editing in jEdit. I mean, it doesn't even have parenthesis balancing, for chrissake.)
ActionScript has first-order functions, allows for dynamic typing, and utilizes class as well as prototype inheritance, even for built-in classes. This means you can do neat things to the prototype object associated with any object - even the Function object itself.
Just because the majority of people developing in ActionScript don't utilize the functionality doesn't mean it doesn't exist! Take a minute to look into the language yourself - you might be very surprised.
The same thing applies in a lot of areas of AS3 -- you can write a GoF-y 2001-Java-looking app with self-documenting code and doc comments and blah blah blah, and then if it's convenient, you can ALSO use first-class functions with currying and all that geek stuff for statements like (just an abstract example):
newArray = oldArray.map(convertFrom(value)).map(applyTransform(transformParams)).reverse().filter(namesFromLanguage(Language.GERMAN));
I don't know what it does with MXML though, and haven't tried the debugger in it either (I don't have the so called enterprise version).