在dart中函数是一等公民,函数可以作为参数,也可以作为返回值,也可以赋值给变量使用。
函数也是一个对象,它的类型为Function。
注意点:dart中没有函数重载,也就是说函数名相同,里面的参数个数或者名称不同是不同的函数。是不可以的。
函数:在进行编写函数的时候有两个注意点入参和返回值。 入参:正常的参数,可选命名参数,必传参数,可选位置参数,带有默认值的参数 返回值:没有return的返回值,默认返回null。
void main() {
test();
test1();
// 普通函数的调用,参数传
test2(10, 20);
// 调用可选的命名参数,参数可传可不传
test3(a: 10, b: 20);
test4('harbin', 'hangzhou');
test4('hangzhou');
var test6 = test5();
test6(1, 2);
// 函数作为参数,调用时直接将函数传入进去
test7(test1);
// 函数作为参数,调用时传入一个匿名函数
test7(() {
print('这里是匿名函数的执行');
});
}
// 声明一个函数
//如果没有显示的声明返回值类型,dart会自动推断返回值类型
//如果没有显示的return返回值,那么默认返回的是null
void test() {
print('i am test function');
}
// 如果函数中只有一行表达式,可以使用箭头函数的形式
void test1() => print('i am test function');
// 声明一个函数
int test2(int a, int b) {
return a + b;
}
//可选的命名参数,调用的时候要通过参数名字赋值
//可选的命名参数可以设置默认值
void test3({int a = 0, int b = 0}) {
var c = a + b;
print('计算的和为:$c');
}
// 可选的位置参数,调用的时候不需要传入参数的名字进行赋值
// 可选的位置参数可以设置默认值
// 可选的位置参数调用位置必须和设置的一致
void test4([String? fromAddr, String? toAddr]) {
print('来自:$fromAddr,打算搬去哪里$toAddr');
}
// 函数作为返回值
Function test5() {
return (a, b) {
print('我是返回的函数');
return a + b;
};
}
// 函数作为参数
void test7(Function foo) {
foo();
}
// 当函数有入参和返回值的时候作为 另外一个函数的写法
typedef test8 = int Function(int a, int b);
void test9(test8 te) {
int sum = te(1, 2);
print(sum);
}