Оценок пока нет Определения типов Typedefs в языке Dart

В Dart функции являются объектами, так же как строки и числа являются объектами. Typedef, или псевдоним типа функции, дает типу функции имя, которое вы можете использовать при объявлении полей и возвращаемых типов.

Рассмотрим следующий код, который не использует typedef:

class SortedCollection {
  Function compare;

  SortedCollection(int f(Object a, Object b)) {
    compare = f;
  }
}

// Initial, broken implementation.
int sort(Object a, Object b) => 0;

void main() {
  SortedCollection coll = SortedCollection(sort);

  // All we know is that compare is a function,
  // but what type of function?
  assert(coll.compare is Function);
}

Информация о типе теряется при назначении f для compare. Тип f(Object, Object)int (где → означает возврат), но тип сравнения compare — Function. Если мы изменим код, чтобы использовать явные имена и сохранили информацию о типе, и разработчики, и инструменты могут использовать эту информацию.

typedef Compare = int Function(Object a, Object b);

class SortedCollection {
  Compare compare;

  SortedCollection(this.compare);
}

// Initial, broken implementation.
int sort(Object a, Object b) => 0;

void main() {
  SortedCollection coll = SortedCollection(sort);
  assert(coll.compare is Function);
  assert(coll.compare is Compare);
}
Примечание. В настоящее время typedefs ограничены типами функций. Мы ожидаем, что это изменится.

Поскольку typedefs являются просто псевдонимами, они предлагают способ проверки типа любой функции. Например:

typedef Compare<t> = int Function(T a, T b);

int sort(int a, int b) => a - b;

void main() {
  assert(sort is Compare<int>); // True!
}

Пожалуйста, оцените материал

WebSofter

Web - технологии