Typedef , или псевдоним типа функции, помогает определять указатели на исполняемый код в памяти. Проще говоря, typedef может использоваться как указатель, который ссылается на функцию.
Ниже приведены шаги для реализации typedefs в программе Dart.
Шаг 1: Определение typedef
Typedef может использоваться для указания сигнатуры функции, которой мы хотим, чтобы определенные функции соответствовали. Сигнатура функции определяется параметрами функции (включая их типы). Тип возвращаемого значения не является частью сигнатуры функции. Его синтаксис выглядит следующим образом.
typedef function_name(parameters)
Шаг 2: Присвоение функции переменной типа
Переменная typedef может указывать на любую функцию, имеющую ту же сигнатуру, что и typedef . Вы можете использовать следующую сигнатуру для назначения функции переменной typedef .
type_def var_name = function_name
Шаг 3: вызов функции
Переменная typedef может использоваться для вызова функций. Вот как вы можете вызвать функцию —
var_name(parameters)
пример
Давайте теперь возьмем пример, чтобы понять больше о typedef в Dart.
Сначала давайте определим typedef . Здесь мы определяем сигнатуру функции. Функция будет принимать два входных параметра типа integer . Тип возвращаемого значения не является частью сигнатуры функции.
typedef ManyOperation(int firstNo , int secondNo); //function signature
Далее давайте определим функции. Определите некоторые функции с той же сигнатурой функции, что и для typeOf типа ManyOperation .
Add(int firstNo,int second){ print("Add result is ${firstNo+second}"); } Subtract(int firstNo,int second){ print("Subtract result is ${firstNo-second}"); } Divide(int firstNo,int second){ print("Add result is ${firstNo/second}"); }
Наконец, мы вызовем функцию через typedef . Объявите переменную типа ManyOperations. Присвойте имя функции объявленной переменной.
ManyOperation oper ; //can point to any method of same signature oper = Add; oper(10,20); oper = Subtract; oper(30,20); oper = Divide; oper(50,5);
Переменная oper может указывать на любой метод, который принимает два целочисленных параметра. Ссылка на функцию Add присваивается переменной. Typedefs может переключать ссылки на функции во время выполнения
Давайте теперь соберем все части вместе и посмотрим всю программу.
typedef ManyOperation(int firstNo , int secondNo); //function signature Add(int firstNo,int second){ print("Add result is ${firstNo+second}"); } Subtract(int firstNo,int second){ print("Subtract result is ${firstNo-second}"); } Divide(int firstNo,int second){ print("Divide result is ${firstNo/second}"); } Calculator(int a, int b, ManyOperation oper){ print("Inside calculator"); oper(a,b); } void main(){ ManyOperation oper = Add; oper(10,20); oper = Subtract; oper(30,20); oper = Divide; oper(50,5); }
Программа должна выдать следующий результат:
Add result is 30 Subtract result is 10 Divide result is 10.0
Примечание. Приведенный выше код приведет к ошибке, если переменная typedef попытается указать на функцию с другой сигнатурой функции.
пример
Typedefs также могут быть переданы в качестве параметра функции. Рассмотрим следующий пример —
typedef ManyOperation(int firstNo , int secondNo); //function signature Add(int firstNo,int second){ print("Add result is ${firstNo+second}"); } Subtract(int firstNo,int second){ print("Subtract result is ${firstNo-second}"); } Divide(int firstNo,int second){ print("Divide result is ${firstNo/second}"); } Calculator(int a,int b ,ManyOperation oper){ print("Inside calculator"); oper(a,b); } main(){ Calculator(5,5,Add); Calculator(5,5,Subtract); Calculator(5,5,Divide); }
Это даст следующий результат —