Skip to content
Dima Kruk edited this page Feb 13, 2013 · 4 revisions

Tuples - языковое расширение, которое добавляет кортежи.

"Кортежами" называют упорядоченный набор объектов данных, содержащий два или более компонентов. В повседневной жизни кортежи встречаются часто, особенно при вызове метода. CodeOrchestra поддерживает два вида кортежей: индексированные и именованные. Для кортежа должны быть определены индексы (или имена, когда используется именованные) и зафиксирована последовательность элементов.

##Использование Tuples

Наиболее частый сценарий использования (индексированных) кортежей является ситуация, когда функция должна возвращать не одно значение, а определённый набор значений конкретного типа.

##Синтаксис индексированого кортежа

Индексированный кортеж имеет две конструкции: тип кортежа и формулировка кортежа.

###Tuple type

  • [ typeA, typeB, …, typeZ ]

Тип кортеж может описать тип любого выражения.

// myVar переменная типа Кортеж
var myVar : [String, int, Sprite] = method();

###Формулировка кортежа

  • [ valueA, valueB, …, valueZ ]

Формулировка индексированного кортежа содержит все его значения.

/**
  * method() должен возвращать тип Кортеж
  */
public function method() : [String, int, Sprite] {
  return ["Hello", 42, this];
}
  • variableName[index];

Как уже ясно из названия, к значениям индексированного кортежа можно обращаться по индексу. Обратите внимание, что в этом случае проверка типов и автодополнение работают. Так как кортежи фиксированного размера, обращение к неверному индексу будет ошибкой.

var myVar : [String, int, Sprite] = method();
var a1 : String = myVar[0];
var a2 : int = myVar[1];
var a3 : Sprite = myVar[2];
myVar[3]; // IDE сообщит от ошибке "out of bounds"

Немного более сложный пример использования кортежей можно показать, используя их вместе с языковым расширением Collections. Вы можете попробовать повторить такое в AS3, используя Vector вместо list, но мы не рекомендуем такой замены.

var myList : list<[String, int, Sprite]> = new list<[String, int, Sprite]>;
myList.add(["Hi there!", 11, this]); // верный код
myList.add([12, "a string", this]); // проверка типов сообщит об ошибке

##Синтаксис именованного кортежа

public tuple Name {
    nameA : typeA;
    …
    nameZ : typeZ;
}

После импортирования языка tuples в контекстном меню пакета появится пункт "New->Tuple". В декларации необходимо указать имя кортежа, имена и типы компонентов.

public tuple myNamedTuple  { 
  username : String;
  birthdate : Date; 
  email : String;
}
  • ( nameA = value, nameB = value, …, nameZ = value )

Именованный кортеж может описать тип любого выражения (так же, как индексированный кортеж). Именованный кортеж содержит все свои значения.

/**
  * method() должен возвращать именованный кортеж
  */
public function method() : (username, birthdate, email) { 
  return (username = "john", birthdate = new Date(1945), email = "john@smith.com"); 
}
  • variableName.name

Обращаться к элементам кортежа можно, используя их имена. Автодополнение имен и проверка типов также будут работать.

var user : (username, birthdate, email) = method(); 
var a1 : String = user.username;
var a2 : Date = user.birthdate;
var a3 : String = user.email;

Clone this wiki locally