-
Notifications
You must be signed in to change notification settings - Fork 0
Tuples (ru)
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;