Skip to content

Closures Syntax (ru)

Dima Kruk edited this page Jan 24, 2013 · 3 revisions

Использование closures в CodeOrchestra выполняет две задачи:

  • Предоставить компактный синтаксис для анонимных функций;
  • Добавить безопасную типизацию для функций.

##Синтаксис

  • : {[parameters]=> return type} = {[parameters]=> body}

Closure syntax очень компактен. Типы параметров чаще всего скрыты. Для удобства чтения и краткости используется однострочный вид closures. В таком случае, ";" в конце опускается. В Closure есть особенное поведение: последнее выражение - это возвращаемое значение. Значит, Вы должны использовать 1; в последней стоке, вместо return 1;.

// декларирование f1, f2 и f3
var f1 : {=>void};
var f2 : {int=>void};
var f3 : {String, String, int=>String};

// closure-стиль
f1 = { =>  };
f2 = { p2:int =>  };
f3 = { p1:String, p2:String, p3:int => "Hello" };
// аналогичный код в "классическом" стиле
f1 = function() : void { 
}; 

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

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

##Type Safety

В pure ActionScript3 функции могут быть только одного типа (Function), вне зависимости от того, какой тип они возвращают, сколько и какого типа параметры принимают.

var f : Function; // f может иметь только тип Function

f = function() : void { };        // проверка типа здесь не работает
f = function(p1:int) : void { };  // и вы можете послать неверные параметры
f = function(p1:String, p2:int) : String {return "Hello"; }; // без предупреждения

Closure имеет конкретный тип, т.е. автокомплит и проверка типов будут работать:

var f1 : {=>void}; // f1 не принимает параметры и возвращает void
var f2 : {int=>void}; // f2 принимает один (int) параметр и возвращает void
var f3 : {String, int=>String}; // f3 принимает 2 параметра и возвращает String

//использование closure не даёт Вам шанса отправить неправильные параметры в функцию

f1 = function() : void { }; // валидный код
f1 = function(a:int) : void { }; // ошибка, система типов сообщит Вам о ней
f1 = function() : String { return "Hello!" }; // ошибка, система типов сообщит Вам о ней

Clone this wiki locally