Skip to content

Closures Syntax (ru)

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

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

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

##Синтаксис

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

Closure syntax очень компактен. Типы параметров чаше всего скрыты. Для удобства чтения и краткости, есть используется однострочный вид closures - в таком случае ";" в конце опускается. Closure также имеет особое поведение - "Последнее выражение это возвращаемое значение". Это значит что вы должны использовать 1; (в последней стоке) вместо retur 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