Skip to content

可选参数

在方括号中定义可选参数

  • 没有默认值
dart
int add(int x, [int? y, int? z]) {
  y ??= 1;
  z ??= 1;
  return x + y + z;
}
  • 有默认值
dart
int add(int x, [int y = 1, int z = 1]) {
  return x + y + z;
}

命名参数

在大括号中定义命名参数

  • 没有默认值
dart
int add(int x, {int? y, int? z}) {
  y ??= 1;
  z ??= 1;
  return x * y * z;
}
  • 有默认值
dart
int add(int x, {int y = 1, int z = 1}) {
  return x * y * z;
}

Function返回函数对象

类似 JS 中的柯里化

dart
Function makeAdd(int x) {
  return (int y) => x * y;
}

var add = makeAdd(2);
print(add(2));

匿名函数

其实很多回调函数都是匿名函数

dart
const List<String> list = ['apples', 'bananas', 'oranges'];
list.forEach((element) {
  print('${list.indexOf(element)}: $element');
});

// 当函数中只有一个表达式的时候,可以改成箭头函数
list.forEach((element) => print('${list.indexOf(element)}: $element'));

作用域

nestedFunction函数可以访问包括顶层变量在内的所有变量

dart
bool topLevel = true;
void main(List<String> args) {
  var insideMain = true;

  void insideFunction() {
    var insideFunction = true;

    void nestedFunction() {
      var insideNestedFunction = true;

      assert(topLevel);
      assert(insideMain);
      assert(insideFunction);
      assert(insideNestedFunction);
    }

    nestedFunction();
  }

  insideFunction();
}

MIT License