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)); //3print(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>### 可选命令参数- 可选命名参数使用 `{}` 括起来,只能在参数列表的最后。- 如果有多个可选参数,都放在 `{}` 里面。- 调用时,参数的型要与声明时一致,参数的位置可以不一致。```dartf1(String x, {name, int age, sex}) {print('x:${x}, name:${name}, age:${age}, sex:${sex}');}f1('a'); //x:a, name:null, age:null, sex:nullf1('a', name: 'jack'); //x:a, name:jack, age:null, sex:nullf1('a', age: 18); //x:a, name:null, age:18, sex:nullf1('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:2f1(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('我是匿名函数');}();
