Skip to content
Dima Kruk edited this page Jan 9, 2013 · 7 revisions

Using closures in Code Orchestra performs two missions:

  • Providing more compact syntax for anonymous functions.
  • Enabling type safe behavior for functions.

##Syntactic Features

  • function ( function ( parameters ) )

Closure syntax is very concise. Parameters type declaration is usually hidden. For readability and brevity, there is a special view for single-line closures – in such a closure a semi-colon on the end is omitted. Closures have also a special behavior – “the last statement is a return value” – which means you should use 1; (in the last line) instead of return 1;.

// declaring f1, f2 and f3
var f1 : {=>void};
var f2 : {int=>void};
var f3 : {String, String, int=>String};

// closure-style 
f1 = { =>  };
f2 = { p2:int =>  };
f3 = { p1:String, p2:String, p3:int => "Hello" };
// the same code in a "classic" style
f1 = function() : void { 
}; 

f2 = function(p1 : int) : void { 
};

f3 = function(p1 : String, p2 : String, p3: int) : String { 
  return "Hello"; 
};

##Type Safety

In the pure ActionScript3 each function can be only of a single type (also Function), no matter what value it returns, how many parameters it has or which type those parameters are.

var f : Function; // f can be of a Function type only

f = function() : void { };          // typesystem checks will not work here
f = function(p1:int) : void { };  // and you can always send a wrong parameter to a function
f = function(p1:String, p2:int) : String {return "Hello"; }; // without any warning

Closure is type safe, i.e. autocomplete and type system checks work here:

var f1 : {=>void}; // f1 doesn't require any parameter and is void
var f2 : {int=>void}; // f2 requires one integer argument and is void
var f3 : {String, int=>String}; // f3 has two arguments and returns String

//using closures don't give you a chance to send a wrong parameter to a function

f1 = function() : void { }; // valid code
f1 = function(a:int) : void { }; // wrong  type, type system will report an error here
f1 = function() : String { return "Hello!" }; // wrong  type, type system will report an error here
Clone this wiki locally