首页 > 其他分享 >无涯教程-Dart - Typedef

无涯教程-Dart - Typedef

时间:2023-11-13 13:32:22浏览次数:38  
标签:oper Typedef int typedef 无涯 firstNo second result Dart

typedef 或function-type alise (函数类型别名)有助于定义指向内存中可执行代码的指针。简而言之, typedef 可用作引用函数的指针。

以下是在Dart程序中实现 typedefs 的步骤。

第1步    -  定义typedef

typedef 可用于指定我们希望特定函数匹配的函数,函数由函数的参数(包括其类型)定义。其语法如下。

typedef function_name(parameters)

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

typedef 的变量可以指向具有与 typedef 的任何函数,您可以将函数分配给 typedef 变量。

type_def  var_name=function_name

第3步    -  调用函数

typedef 变量可用于调用函数,这是调用函数的方法-

var_name(parameters) 

Typedef - 示例1

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

首先,让我们定义一个 typedef ,在这里,我们定义一个函数,该函数将使用两个 integer 类型的输入参数。

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 - 示例2

Typedefs 也可以作为参数传递给函数,考虑以下示例-

typedef ManyOperation(int firstNo , int secondNo);  
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

参考链接

https://www.learnfk.com/dart-programming/dart-programming-typedef.html

标签:oper,Typedef,int,typedef,无涯,firstNo,second,result,Dart
From: https://blog.51cto.com/u_14033984/8342393

相关文章

  • 无涯教程-Dart - 调试(Debug)
    开发人员时不时地在编码时犯错误,程序中的错误称为错误,查找和修复错误的过程称为调试,并且是开发过程中的正常部分,本节介绍可帮助您完成调试任务的工具和技术。添加断点考虑以下代码片段。(TestString.dart)voidmain(){inta=10,b=20,c=5;c=c*c*c;p......
  • 无涯教程-Dart - 包(Package)
    包Packages是一种封装机制,每种语言都有一种管理外部程序包的机制,如Java的Maven或Gradle,.NET的Nuget,Node.js的npm等,Dart的程序包管理器是pub 包元数据在文件pubsec.yaml中定义,YAML是另一种标签语言的缩写,pub工具可用于下载应用程序所需的所有各种库。每个Dart应用程序都......
  • 无涯教程-Dart - Unicode
    字符串是字符序列,Dart将字符串表示为UnicodeUTF-16代码单元的序列。dart:core库中的String类提供了访问runes的机制,字符串的三种方式访问形式​​-使用String.codeUnitAt()函数使用String.codeUnits属性使用String.runes属性String.codeUnitAt()函数通过其索引进行访......
  • 无涯教程-Dart - Symbol(符号)
    Symbol是一种用于存储人类可读字符串和经过优化以供计算机使用的字符串之间的关系的方法。Symbolobj=newSymbol('name');name必须是有效的公共Dart成员名称,公共构造函数名称或库名称。考虑以下示例,该代码在库foo_lib中声明了一个Foo类,该类定义方法m1,m2,和m3。libra......
  • 无涯教程-Dart - Map(映射)
    Map对象是一个简单的键/值对,Map中的键和值可以是任何类型,Map是动态集合,换句话说,Map可以在运行时增长和收缩。您需要将键/值对(key/value)放在大括号"{}"中,这是它的语法-varidentifier={key1:value1,key2:value2[,…..,key_n:value_n]}构造函数声明Map的语法如下-var......
  • 无涯教程-Dart - Lists(列表)
    array是编程中非常常用的集合,Dart以List对象的形式表示数组,列表只是一组有序的象。dart:core库提供了List类,该类允许创建和操作列表。Dart中列表的逻辑表示如下-固定长度列表固定长度列表的长度不能在运行时更改,创建固定长度列表的语法如下:步骤1  - 声明列表下......
  • 无涯教程-Dart - Boolean(布尔)
    Dart为Boolean数据类型提供了内置支持,DART中的布尔数据类型仅支持两个值–true和false。语法如下所示-boolvar_name=true;ORboolvar_name=falseBoolean-示例1voidmain(){booltest;test=12>5;print(test);}它将产生以下输出-trueBoolea......
  • 无涯教程-Dart - Numbers(数值)
    Dartnumber可以归类为-int    -  任意大小的整数。double -  64位(双精度)浮点数,由IEEE754标准指定,double数据类型用于表示小数语法-intvar_name;//声明一个整型变量doublevar_name;//声明一个双精度变量voidmain(){intnum......
  • 无涯教程-Dart - 条件判断
    条件语句在执行指令之前先判断条件。下表中对Dart中的条件构造进行了分类。Sr.NoStatement&描述1ifstatementif语句包含一个布尔表达式,后跟一个或多个语句。2If...ElseStatement一个if后面可以是一个可选的else块。如果if块测试的布尔表达式判断为false,......
  • 无涯教程-Dart - 循环语句
    下图说明了条件循环的分类-Sr.NoLoop&Remark1forloopfor循环是确定循环的实现,for循环将代码块执行指定的次数,它可以用于迭代一组固定值,如数组2for…inLoopfor...in循环用于循环访问对象的属性。继续,让我们现在讨论无限循环,当循环中的迭代次数不确定或未知时,......