-
Notifications
You must be signed in to change notification settings - Fork 0
Closures Syntax
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