js-函数:https://www.yuque.com/zhuchaoyang/wrif6k/bvf40l
函数的定义
Dart 中有很多内置的函数,比如 print()
。除此之外,我们也可以定义自己的函数方法。
- 定义时,函数类型可以省略(不建议省略)。
- 函数都有返回类型,void类型函数,实际返回
null
。 - 所有函数都有返回值,如果没有显式返回,那么默认
return null
。 - 函数可以在函数内部定义,无限嵌套。
语法
函数的定义:
返回值类型 函数(方法)名称(参数1, 参数2, ...){
//代码
return 返回值;
}
函数的执行:
函数名(参数1, 参数2, ...);
void main(){
//定义一个函数
int sum(x, y) { //int 可以省略
return x + y;
}
print(sum(1, 2)); //3
print(sum is Function); //true
// 把函数赋值给变量
// var sum2 = sum;
var sum2 = (x, y) {
return x + y;
};
print(sum2(1, 2));
}
箭头函数
如果函数体只有一行表达式,可以用箭头函数形式。箭头函数返回一个值。
sum(x, y) => x + y;
print(sum(1, 2)); //3
函数的传参
参数分为必要参数和可选参数,可选参数只能在参数列表的最后。
参数的类型定义,可省略
调用时,参数的位置和类型要与声明时一致。
f1(String x, int y) {}
f1('a', 1);
// f1(2, 1); //报错,因为 x只能传字符串,y只能传整型
f2(x, y) {}
f2(1, 2);
// f2(1); //报错,因为 x,y 都是必要参数
可选参数
可选参数分为可选位置参数、可选命名参数。二者都可以定义默认值,但是默认值必须是编译时常量。
没有设置默认值也没有传值的参数,默认为 null
。(相当于声明了参数变量,但没有赋值)
可选位置参数
- 可选位置参数使用
[]
括起来,只能在参数列表的最后。 - 如果有多个可选参数,都放在
[]
里。 - 调用时,参数的位置和类型要与声明时一致。 ```dart //1个可选参数 f2(x, [y]) { print(‘x:${x}, y:${y}’); } f2(1, 2); //x:1, y:2 f2(1); //x:1, y:nul 没有设置默认值也没有传值的参数y,默认为null。
//多个可选参数 f3(x, [y, int z]) { print(‘x:${x}, y:${y}, z:${z}’); } f3(1, 2, 3); //x:1, y:2, z:3
f4(x, [y], [z]) {} //报错
<a name="KWDF0"></a>
### 可选命令参数
- 可选命名参数使用 `{}` 括起来,只能在参数列表的最后。
- 如果有多个可选参数,都放在 `{}` 里面。
- 调用时,参数的型要与声明时一致,参数的位置可以不一致。
```dart
f1(String x, {name, int age, sex}) {
print('x:${x}, name:${name}, age:${age}, sex:${sex}');
}
f1('a'); //x:a, name:null, age:null, sex:null
f1('a', name: 'jack'); //x:a, name:jack, age:null, sex:null
f1('a', age: 18); //x:a, name:null, age:18, sex:null
f1('a', age: 18, name: 'jack', sex: 'male'); //x:a, name:jack, age:18, sex:male
参数的默认值
只有可选参数,才能加默认值。
f1(x, [y = 10]) {
print('x:${x}, y:${y}');
}
f1(1, 2); //x:1, y:2
f1(1); //x:1, y:10
高阶函数
js-高阶函数:https://www.yuque.com/zhuchaoyang/wrif6k/we9kxl
所谓高阶函数,就是把函数作为参数或返回值。
a() {
print('我是a函数');
}
show(fn) {
fn();
}
show(a);
匿名函数
js-匿名函数:https://www.yuque.com/zhuchaoyang/wrif6k/xcsois
没有名字的函数。
(() {
print('我是匿名函数');
})();
(){
print('我是匿名函数');
}();