js-函数:https://www.yuque.com/zhuchaoyang/wrif6k/bvf40l

函数的定义

Dart 中有很多内置的函数,比如 print() 。除此之外,我们也可以定义自己的函数方法。

  • 定义时,函数类型可以省略(不建议省略)。
  • 函数都有返回类型,void类型函数,实际返回 null
  • 所有函数都有返回值,如果没有显式返回,那么默认 return null
  • 函数可以在函数内部定义,无限嵌套。

语法
  1. 函数的定义:
  2. 返回值类型 函数(方法)名称(参数1, 参数2, ...){
  3. //代码
  4. return 返回值;
  5. }
  6. 函数的执行:
  7. 函数名(参数1, 参数2, ...);
  1. void main(){
  2. //定义一个函数
  3. int sum(x, y) { //int 可以省略
  4. return x + y;
  5. }
  6. print(sum(1, 2)); //3
  7. print(sum is Function); //true
  8. // 把函数赋值给变量
  9. // var sum2 = sum;
  10. var sum2 = (x, y) {
  11. return x + y;
  12. };
  13. print(sum2(1, 2));
  14. }

箭头函数

如果函数体只有一行表达式,可以用箭头函数形式。箭头函数返回一个值。

  1. sum(x, y) => x + y;
  2. print(sum(1, 2)); //3

函数的传参

参数分为必要参数和可选参数,可选参数只能在参数列表的最后。

参数的类型定义,可省略

调用时,参数的位置和类型要与声明时一致。

  1. f1(String x, int y) {}
  2. f1('a', 1);
  3. // f1(2, 1); //报错,因为 x只能传字符串,y只能传整型
  4. f2(x, y) {}
  5. f2(1, 2);
  6. // 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]) {} //报错

  1. <a name="KWDF0"></a>
  2. ### 可选命令参数
  3. - 可选命名参数使用 `{}` 括起来,只能在参数列表的最后。
  4. - 如果有多个可选参数,都放在 `{}` 里面。
  5. - 调用时,参数的型要与声明时一致,参数的位置可以不一致。
  6. ```dart
  7. f1(String x, {name, int age, sex}) {
  8. print('x:${x}, name:${name}, age:${age}, sex:${sex}');
  9. }
  10. f1('a'); //x:a, name:null, age:null, sex:null
  11. f1('a', name: 'jack'); //x:a, name:jack, age:null, sex:null
  12. f1('a', age: 18); //x:a, name:null, age:18, sex:null
  13. f1('a', age: 18, name: 'jack', sex: 'male'); //x:a, name:jack, age:18, sex:male

参数的默认值

只有可选参数,才能加默认值。

  1. f1(x, [y = 10]) {
  2. print('x:${x}, y:${y}');
  3. }
  4. f1(1, 2); //x:1, y:2
  5. f1(1); //x:1, y:10

高阶函数

js-高阶函数:https://www.yuque.com/zhuchaoyang/wrif6k/we9kxl

所谓高阶函数,就是把函数作为参数或返回值。

  1. a() {
  2. print('我是a函数');
  3. }
  4. show(fn) {
  5. fn();
  6. }
  7. show(a);

匿名函数

js-匿名函数:https://www.yuque.com/zhuchaoyang/wrif6k/xcsois

没有名字的函数。

  1. (() {
  2. print('我是匿名函数');
  3. })();
  4. (){
  5. print('我是匿名函数');
  6. }();