Dart编程Typedef


typedef 或函数型的别名,有助于存储器内定义指针的可执行代码。简单地说, typedef 可以用作引用函数的指针。

下面给出了在Dart程序中实现 typedef 的步骤。

第1步:定义typedef

一个 typedef 可以用来指定我们要匹配的函数签名。函数签名由函数的参数(包括其类型)定义。返回类型不是函数签名的一部分。其语法如下。

typedef function_name(parameters)

第2步:将函数分配给typedef变量

的可变 typedef 可以指向具有相同签名的任何函数 typedef 。您可以使用以下签名将函数分配给 typedef 变量。

type_def  var_name = function_name

第3步:调用函数

typedef 变量可以用于调用函数。以下是调用函数的方法

var_name(parameters)

例如

现在让我们举一个例子来了解Dart中关于 typedef 的更多信息。

首先,让我们定义一个 typedef 。这里我们定义一个函数签名。该函数将采用 int 类型的两个输入参数。返回类型不是函数签名的一部分。

typedef ManyOperation(int firstNo , int secondNo); //函数签名

接下来,让我们定义函数。使用与 ManyOperation typedef 相同的函数签名定义一些函数。

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 函数的引用赋值给变量。Typedef可以在运行时切换函数引用

现在让我们将所有部分放在一起,看看完整的程序。

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 变量尝试指向具有不同函数签名的函数,则上述代码将导致错误。

例如

typedef 也可以作为参数传递给函数。考虑以下示例

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

它将产生以下 输出

Inside calculator
Add result is 10
Inside calculator
Subtract result is 0
Inside calculator
Divide result is 1.0