foo(Void) vs foo()

Sometimes the benefits of a scripting language can come back to bite you in the rump 🙂 One thing that I’ve seen a lot of recently is the practice of declaring a function to have a single parameter: Void. The intention here is to indicate that the function takes NO parameters, a feature that other languages sometimes support. However, in ECMAScript (and thus ActionScript) it does NOT have that meaning. In fact, the compiler instead declares a local variable called Void! You can debate all you want about how wrong or right this is, but it’s the way the language is designed.

Despite some of the additions to the language in AS2, ActionScript is still a scripting language and still allows you to pass a different number of parameters than what is declared in the function signature. In Flex we added some compiler checking to make sure that if you declare a variable or function that is already declared in the superclass, the type or signature matches between the two. This is to help prevent developers from accidentally overwriting a variable they didn’t know existed in the superclass. However it also catches something like our (Void) problem. All shipped Flex code does not use the (Void) convention. If you then override a function and use that convention (which may have been done a lot in in the V2 components with MX 2004) you will see the compiler give you an error about Void not matching the superclass type.

Not sure how clear this is but I hope it can be of some help.

2 Responses to foo(Void) vs foo()

  1. Samuel Neff says:

    Too bad the example was set to specify Void early on. The Flash components use Void as a parameter over 300 times…

  2. Now I know why languages like Java have reserved words — like goto. Now I also know why compilers give warnings. 🙂