Typedef -- это конструкция, определяющая типы для проверки типов анонимных типов. Во завернул! Уж не знаю, как это можно объяснить нормальным языком. Это что-то вроде интерфейсов, только там описаны свойства объекта, а не методы. Например, если мы опишем тип таким образом:
typedef Human = { numHeads : Int, numHands : Int, numLegs : Int }
то такому типу будет соответсвовать любой объект, имеющий свойства numHeads, numHands, numLegs типа Int. И любой такой объект мы можем передать в данной ситуации:
typedef Human = { numHeads : Int, numHands : Int, numLegs : Int }
class Alien
{
public var numHeads : Int;
public var numHands : Int;
public var numLegs : Int;
public function new()
{
this.numHeads = 2;
this.numHands = 8;
this.numLegs = 3;
}
}
function greet(man : Human):Void
{
}
var dangerousCreature:Alien = new Alien();
greet(dangerousCreature);
Здесь функция greet без проблем примет переменную типа Alien, потому что она соответствует типу Human. В отличие от интерфейсов, в классе Alien не нужно указывать, что он реализует тип Human.
Создать экземпляр typedef можно следующим образом:
var goodFellow : Human = { numHeads : 1, numHeands : 2, numLegs : 2 };
Таким образом typedef может заменить собой небольшй класс, предоставляя более лакончный синтаксис. Конечно, это удобно, когда параметров не слишком много, потому что их нужно все перечислять при создании каждого экземпляра.
typedef также можно использовать для создания синонимов для существующих типов. Например:
enum ThreeState
{
Checked;
Unchecked;
Indeterminated;
}
class Person
{
public var name : String;
public function new() { }
}
typedef GenericFunction<T> = Void -> T
typedef IntArray = Array<Int>
typedef P = Person
typedef TS = ThreeState
typedef могут содержать функции:
typedef B = {
x : Float,
y : Float
say : String -> String
}
могут описывать шаблоны типов:
typedef Leaf<T> = {
parent : Node<T>,
data : T
}
typedef существует только во время компиляции и используются для проверки типов. В результирующем swf-файле их нет. typedef предоставляет простой и лаконичный синтаксис, заменяет интерфейсы и даже небольшие классы. Синонимы типов тоже полезны, дальше мы увидим, как это может облегчить нам жизнь.
Комментарии
очень просто, но очень удобно
Определение типа - очень простая, но полезная вещь.
Сделав пару проектов на haXe я так к ней привык, что когда после этого пришлось снова возвращаться к AS её иногда очень не хватает.
Прежде всего это проявляется в работе с мелкими (да и не очень) объектами, передаваемыми на сервер и обратно. С помощью typedef им можно в одну строчку и за минуту задать типы и после этого ты обращаешься уже не с безликим набором полей, которые нужно помнить, а с экземпляром конкретного типа, да ещё получаешь бесплатный автокомплит по нему от компилятора в придачу + проверку типов при компиляции.