Package-level function closures in ActionScript

Package-level function closures are very useful for creating generalized functionality which does not require a class (static methods) or instance of a class (instance methods).

Unlike static and instance methods package-level function closures are not associated with a class or instance of a class but rather with a package. There are no syntactical differences between package-level functions and static or instance methods.

Package-level functions are for the most part utility functions; for instance the flash.utils package contains a number of package-level functions, the most common of which are describeType(), getDefintionByName(), getTimer() and so forth.

Package-level function closures are created by defining a function directly inside the body of a package (where class and interfaces are defined), as can be seen in the following example:

package com.ericfeminella.display
{
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.IBitmapDrawable;
import mx.graphics.ImageSnapshot;

/**
 *
 * Creates a snap shot of a <code>Bitmap</code> object
 * from the specified <code>IBitmapDrawable</code>
 * implementation.
 *
 * @param  display object in which to create the snapshot
 * @return <code>Bitmap</code> snapshot of the display object
 *
 */
    
public function createSnapShot(target:IBitmapDrawable) : Bitmap
{
    return new Bitmap(ImageSnapshot.captureBitmapData(target));
}
}

Calling a package level function is straightforward, simply import the function just as you would a class or interface and then invoke the function directly…

// import package function
import com.ericfeminella.display.createSnapShot;

// once imported the function can be invoked
createSnapShot( this );

Typically you will find that most functionality can be grouped to a Class or an instance object, however on occasion you may identify specific functionality which is common to packaged functionality as opposed to a specific object, and in these cases utilizing package-level functions is a great option.

8 Responses to “Package-level function closures in ActionScript”

  1. Marcos Arruda BRAZIL Says:

    Excelent Eric! I love to see this details described. Keep this coming please.

  2. Sean Moore UNITED KINGDOM Says:

    Hey Eric,

    Great post. Is the Singleton Enforcer an example of this?

    Kind regards,

    Sean

  3. eric UNITED STATES Says:

    Hey Sean,

    Are you referring to the SingletonManager?
    http://code.ericfeminella.com/classes/as3/SingletonManager.as.html

    Thanks,
    Eric

  4. William from Lagos Says:

    Pretty cool. Thanks for the information.

  5. sam CANADA Says:

    does this work in flex 3? or is it just a flex 2 thing?

  6. eric UNITED STATES Says:

    Hey Sam,

    This is specific to ActionScript 3.0 so it should work in Flex 2 and 3 as well as AIR and Flash.

    - Eric

  7. Colby Cheeze UNITED STATES Says:

    This doesn’t seem to be working for me. I am using Flex 3. I created a function as you said…and I can import it…and the Flex code hinting picks it up and everything (just like the built in functions getTimer() etc…) however after I type in a function or whatever it gives me
    “Definition com.cheezeworld.com.utils:stripWhitespace could not be found.”

    I don’t understand? meh…

  8. Darin Kohles UNITED STATES Says:

    Great post, like the man sai - keep them coming.

    Another great topic might be inner or package level private classes that are only available inside a package.

Leave a Reply