Table of Content
首先, 如前面所讲, Dart
中函数也是对象的一种。当一个函数没有指定返回值时, 返回 null
。
函数定义
定义一个函数的格式是:
返回值 函数名(参数类型 参数名1, 参数类型 参数名2, ...) {
// 函数体
return 返回值
}
其中类型部分都是可选的:
函数名(参数名1, 参数名2, ...) {
// 函数体
return 返回值
}
例如:
String sayHelloTo(String name) {
return 'Hello $name!';
}
sayHelloTo(name) {
return 'Hello $name!';
}
对于简单返回一个表达式的函数, 也可以使用 =>exp;
的方式定义, 例如:
sayHelloTo(name) => 'Hello $name!';
匿名函数
类似的, 我们也可以定义匿名函数:
var sayHello = (name) => 'Hello $name!';
函数别名
通过 typedef
关键字我们可以函数别名:
typedef int NumberMagic(int a, int b); // 定义函数别名
int Subtract(int a, int b) => a - b; // 定义普通函数
void main() {
print(Substract is Function);
print(Substract is NumberMagic);
}
函数闭包
Function makeSubstract(num n) {
return (num i) => n - i; // 返回一个函数
}
void main() {
var x = makeSubstract(5); // 5 对应了前面的 num n
print(x(2)); // 2 对应了前面的 num i
}
可选参数
对于可选参数的声明有两种方式:
- 通过大括号 (
{}
) 包含, 其中可以声明 0 或多个可选参数, 这种方式不关心顺序, 因此调用时需要指明参数名, 未赋值的可选参数将为null
。 - 通过中括号 (
[]
) 包含, 其中可以声明 0 或多个可选参数, 这种方式会按顺序依次复制参数, 因此调用时可以不指明参数名, 未赋值的可选参数将为null
。
例如:
FunX(a, {b, c:3, d:4, e}) {
print('$a $b $c $d $e');
}
FunY(a, [b, c=3, d=4, e]) {
print('$a $b $c $d $e');
}
void main() {
FunX(1, b:3, d:5);
FunY(1, 3, 5);
}