文章目录
- 函数
- 函数特点
- 可选和默认参数
- 函数对象
- 箭头函数
- 匿名函数
- 综合案例
能够定义并使用Dart函数
学习内容:
- 函数定义
- 可选和默认参数
- 函数对象
- 箭头函数
- 匿名函数
函数
函数定义
Dart函数的结构:
调用函数:
案例:定义计算任意两个整数之和的函数,并返回计算结果
函数特点
- 返回值类型和参数类型都可以省略
- 函数都有返回值,如果没有明确指定,默认返回 null
void main() {
//调用函数
sum1();
int ret = sum2(10, 20);
print(ret);
}
int sum2(int a, int b){
int ret = a + b;
return ret;
}
可选和默认参数
- 可选命名参数:
void main() {
printString('zzm', age: 15);
}
// 可选命名参数
void printString(String name, {int? age, String? location = '昌平区'}) {
print('$name - $age - $location');
}
**注意点:**可选参数必须是可以为空的
- 默认参数:
函数对象
在Dart中,一切都是对象,函数也是对象,类型是Function
函数可作为对象赋值给其他变量
函数可作为参数传递给其他函数
void main() {
// 定义一个变量接收函数
// var f = funcDemo1;
Function f = funcDemo1;
f();
funcDemo2(funcDemo3);
}
// 函数可以作为对象赋值给其他变量
void funcDemo1() {
print('funcDemo1');
}
// 函数可以作为参数传递给其他函数
void funcDemo2(Function func) {
// 调用外界传入的函数
func();
}
// 定义作为参数的函数: 把funcDemo3传入到funcDemo2
void funcDemo3() {
print('funcDemo3');
}
箭头函数
函数体只包含一个表达式时,可以使用箭头函数进行简写
简写
提示:=>
表达式 是对 { return 表达式 }
的简写
void main() {
int ret1 = sum1(10, 20);
print(ret1);
int ret2 = sum2(30, 40);
print(ret2);
}
int sum1(int a, int b) {
return a + b; // 函数体只有一个表达式
}
// 使用箭头函数简写只有一个表达式的函数体
int sum2(int a, int b) => a + b;
匿名函数
匿名函数是一种没有函数名称的函数。
但是和其他函数一样,它也有形参列表,也可以有可选参数。
特点:
- 仅在调用时,才临时创建函数对象,调用完立即释放,节省内存空间
使用场景:
- 可赋值给变量,通过变量进行调用
- 可当做参数传递给其他函数去调用(回调函数)
void main() {
// 匿名函数
// 匿名函数赋值给变量,并调用
Function f = () {
print('这是一个匿名函数');
};
f();
// 可以作为参数传递给其他函数去调用(回调函数)
funcDemo(() {
print('这个匿名函数是个参数');
});
}
// 定义一个接收函数作为参数的函数
void funcDemo(Function func) {
func();
}
综合案例
- 案例:计算购物车商品是否全选
// 准备购物车数据
List carts = [
{"count": 2, "price": 10.0, "selected": true},
{"count": 1, "price": 30.0, "selected": false},
{"count": 5, "price": 20.0, "selected": true}
];
- 核心逻辑:只要有一个商品未勾选那就是非全选
// 案例:计算购物车商品是否全选
// 核心逻辑:只要有任何一个商品是未勾选的,那么就是非全选
bool getSelectedState(List carts) {
// 购物车初始的状态:默认是全选
bool isSelectedAll = true;
carts.forEach((element) {
bool selected = element['selected'];
// 核心代码:只要有任何一个商品是非勾选的,则购物车就是非全选
if (selected == false) {
isSelectedAll = false;
}
});
return isSelectedAll;
}
整体代码
void main() {
// 准备购物车数据
List carts = [
{"count": 2, "price": 10.0, "selected": true},
{"count": 1, "price": 30.0, "selected": false},
{"count": 5, "price": 20.0, "selected": true}
];
bool isSelectedAll = getSelectedState(carts);
if (isSelectedAll) {
print('全选');
} else {
print('非全选');
}
}
// 案例:计算购物车商品是否全选
// 核心逻辑:只要有任何一个商品是未勾选的,那么就是非全选
bool getSelectedState(List carts) {
// 购物车初始的状态:默认是全选
bool isSelectedAll = true;
carts.forEach((element) {
bool selected = element['selected'];
// 核心代码:只要有任何一个商品是非勾选的,则购物车就是非全选
if (selected == false) {
isSelectedAll = false;
}
});
return isSelectedAll;
}