Package-level function closures in ActionScript
Tuesday, May 6th, 2008Package-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.
