Dart是一种真正的面向对象语言,因此既是函数也是对象并且具有类型Function。这意味着函数可以分配给变量或作为参数传递给其他函数。
和绝大多数编程语言一样,Dart函数通常的定义方式如代码示例5-13所示。
代码示例5-13 chapter05/03/01_func.dart
如果函数体中只包含一个表达式,则可以使用简写语法,代码如下。
Dart函数可以设置可选参数,可以使用命名参数,也可以使用位置参数。
命名参数,定义格式如{param1,param2,...},如代码示例5-14所示。
代码示例5-14 chapter05/03/02_func_param1.dart
位置参数,使用[]来标记可选参数,如代码示例5-15所示。
代码示例5-15 chapter05/03/03_func_param2.dart
函数的可选参数也可以使用等号(=)设置默认值,如代码示例5-16所示。
代码示例5-16 chapter05/03/04_func_param4.dart
和其他编程语言一样,Dart中每个应用程序都必须有一个顶级main()函数,该函数作为应用程序的入口,代码如下:
Dart中的函数可以作为另一个函数的参数,如代码示例5-17所示。
代码示例5-17 chapter05/03/05_func_fn.dart
在Dart中可以创建一个没有函数名称的函数,这种函数称为匿名函数,或者称为lambda函数、闭包函数,但是和其他函数一样,它也有形参列表,可以有可选参数,如代码示例5-18所示。
代码示例5-18 chapter05/03/06_func_lambda.dart
匿名函数就是没有名字的函数,代码如下:
匿名函数通常用在不需要被其他场景调用的情况,例如遍历一个list,代码如下:
其他的用法如下:
Dart支持嵌套函数,也就是函数中可以定义函数,如代码示例5-19所示。
代码示例5-19 chapter05/03/07_func_loop.dart
闭包是一种方法(对象),它定义在其他方法内部,闭包能够访问外部方法中的局部变量,并持有其状态,如代码示例5-20所示。
代码示例5-20 chapter05/03/08_func_closer.dart