可选参数
在方括号中定义可选参数
- 没有默认值
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();
}