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
,定义的是一个函数签名。该函数将采用整数类型的两个输入参数。返回类型不是函数签名的一部分。
typedef ManyOperation(int firstNo , int secondNo); //function signature
接下来定义函数。使用与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