5 - Dart 函数

181 阅读2分钟

函数

本质

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"));