函数
本质
和 javascript 一样,函数就是对象,它的类型就是 Function 。因此,Dart 的函数就如同其他的数据类型一样,可以给一个变量赋值,可以作为参数在其他函数之间传递。
创建一个函数
-
正常写法
bool isEven(int num){ return num % 2 == 0; } -
其实我们可以省略掉返回值的类型,因为编译器会帮我们处理
isEven(int num){ return num % 2 == 0; } -
箭头函数:如同
javascript一样,我们可以使用箭头函数来把最有一个表达式的函数简写。isEven(int num) => num % 2 == 0;
返回值
- 就算在函数体内没有使用
return,默认还是会返回null
参数
-
可选参数/参数默认值
我们只需要把一些可选参数放在所有必填参数后面,用个数组圈起来即可。同时需要注意,只有在可选参数里面,才能给参数赋上默认值。bool compareNumber(int num1,[int num2 = 10]){ return num1 > num2; } -
命名参数
对于javascript来说,这个比较陌生,一般来在说javascript中,我们都是使用传入一个map/object来做到每一个参数都有名字的做法。
但是命名参数在swift/object-c中是很常见的。 而在flutter中大多数widegt的构造方法中都是采用命名参数的做法, 而且在命名函数中,我们还能直接配置默认值。
而采用@required还能让开发者在使用的时候,不会忘记给参数赋值//int add({int width, int height}) { // return width + height; //} //int add({int width = 1,@required int height}) { // return width + height; //} int add({int width = 1, int height = 2}) { return width + height; } var a1 = add(width:2,height:2); var a2 = add(); print(a1); print(a2);
函数作为参数
如果作为 javascript 开发者,对于函数作为参数传递是最熟识不过的了,使用场景最多就是 callback。
void load(var callback){
// do some thing
callback();
}
load(()=>print("success"));