Сталкивались ли вы когда-нибудь с ситуацией при кодировании, когда вы знаете, какой тип возвращаемого значения будет иметь функция, но еще не написали эту функцию или тип, который будет возвращен?

Что ж, в таком случае dart предлагает своим разработчикам typedef .

давайте сначала посмотрим на определение typedef для dart:

Определение:

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

Давайте углубимся в определение и попытаемся понять, что оно на самом деле означает.

По сути, typedef - это псевдоним функции или предполагаемый идентификатор, который вы можете использовать для указания типа функции или переменной при написании кода. он сообщает компилятору ожидать того же возвращаемого значения typedef like при выполнении этого фрагмента кода.

Синтаксис и пример:

Итак, typedef - это способ описания типа переменной или возвращаемого типа функции без наличия функции в полностью реализованном виде.

Теперь давайте посмотрим на синтаксис того, как мы можем определить typedef в dart.

Синтаксис 1 | Плохо:

typedef return_type FunctionName(parameters);

E.g

typedef bool SendMessage(String message);

Синтаксис 2 | Хорошо:

typedef FunctionName = return_type Function(parameters);

E.g

typedef SendMessage =  bool Function(int num);

Итак, теперь мы узнали о синтаксисе и о том, что такое typedef на самом деле. Пришло время взглянуть на пример использования typedef.

Соглашение об именах:

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

typedef Send = void Function(String message);
void SendTextMessage(String msg) {
  //Some stuff related to SMS logic
  print(msg);
}
void SendEmail(String msg) {
  //Some stuff realted to email client logic
  print(msg);
}
void main() {
  // assign your typedef to any function matching the signatures.
  Send sendMessage = SendTextMessage;
  sendMessage("Hello! this is a text message");
  // you can also change the return type and reassign on the fly.
  sendMessage = SendEmail;
  sendMessage("Hello! this is an email");
}

В приведенном выше коде у нас есть две функции: SendTextMessage () и SendEmail (), обе имеют одинаковые сигнатуры, поэтому вместо прямого вызова функций вы можете использовать typedef и определять сигнатуры обеих функций, которые вы можете назначить позже этому typedef, как показано в main () . Кроме того, вы можете переназначить свою функцию typedef на функцию diff на лету.

Сигнатуры ваших функций () и определенного typedef должны точно совпадать друг с другом.

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

  1. Typedef используются для написания чистого кода. Код становится понятным и понятным.
  2. Вы можете использовать одно и то же имя функции typedef в качестве возвращаемого типа для всех подобных типов функций с одинаковыми сигнатурами.
  3. В Dart определения типов широко используются в обратных вызовах.
  4. Поскольку все является объектом в дротике, сравнение типов объектов становится действительно важным в некоторых ситуациях. Typedef всегда сохраняет свою информацию о типе. Так что в таких ситуациях очень полезно использовать typedef.