Учебники

Программирование дротиков — Typedef

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 может переключать ссылки на функции во время выполнения

Давайте теперь соберем все части вместе и посмотрим всю программу.

Live Demo

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 также могут быть переданы в качестве параметра функции. Рассмотрим следующий пример —

Live Demo

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); 
} 

Это даст следующий результат