1. 函数
1.1. 函数的定义
void main(){
fnaaa();
print(fnbbb(100, 200));
}
// 1. 定义函数:无参数无返回值
void fnaaa(){
print('打印函数中内容');
}
// 2. 定义函数:有参数有返回值
// 需求:定义函数,计算任意两个整数的和,并返回计算结果
int fnbbb(int num1,int num2){
return num1 + num2;
}
// 3. 函数特点:
// - 函数都有返回值,如果没有明确的指定返回值,那么默认返回null
// - 特点2:返回值类型和参数类型是可以省略的
// 如下特点2:类型都删掉都行,但建议都加上;
fnccc( num1, num2){
return num1 + num2;
}
1.2. 函数的参数-必传参数、可选参数
表达式的意思:
- 有加减乘除符号 & 逻辑运算符的
- 还有函数调用表达式(某段代码是 调函数,也叫做表达式);
void main(){
// fnaaa('张三',18);
fnbbb('张三',18,gender: '女',location : '上海');
}
// 1. 必传参数
// 拓展:${}的大括号里面如果写表达式,得加大括号;如果只有一个参数可以直接写$name; 表达式:有加减乘除符号 & 逻辑运算符的,还有函数调用表达式(调函数);
// void fnaaa(String name,int age){
// print('姓名:$name,年龄:${age}');
// }
// 2. 可选参数 -其实就是将可选参数放在一个{}里,也就是Map里
// 可选参数 才可以设置默认值(如:String? location = '深圳') (如果形参、入参都不传参数,打印出来就是null), 必传参数 不可以设置默认值
// 可选参数 入参中的顺序是可以无顺序的
void fnbbb(String name,int age,{String? location = '深圳',String? gender = '男'}){
print('姓名:$name,年龄:${age},地址:${location},的性别:${gender}');
}
1.3. 函数作为对象、参数 去传递
void main(){
// // 1.函数可以作为对象 传递给 变量
// var f = fnaaa;
// Function f = fnaaa;
// f();
// // 2.函数可以作为参数 传递给 函数
// var f = fnTot(fnbbb);//其实这就是回调函数 如下写法是一样的
// print(f);
//回调函数写法
var f = fnTot(() {
return 111;
});
print(f);
}
// // 1. 函数可以作为对象 传递给 变量
// void fnaaa(){
// print('这是一段文字');
// }
// 2. 函数可以作为参数 传递给 函数
int fnbbb(){
return 100;
}
int fnTot(Function f){
return f() + 111;
}
1.4. 匿名函数和箭头函数
匿名函数:就是没有名字的函数
1.4.1. 鸿蒙中的匿名函数:
// 匿名函数作为变量
// 这里的 function(name: string) {return `Hello, ${name}!`;}; 是匿名函数
const greet = function(name: string) {
return `Hello, ${name}!`;
};
console.log(greet("Alice")); // 输出: Hello, Alice!
// 匿名函数作为回调
// 这里的 function(num) {return num * 2;} 是匿名函数
const numbers = [1, 2, 3];
const doubled = numbers.map(function(num) {
return num * 2;
});
console.log(doubled); // 输出: [2, 4, 6]
简化写法
// 1. 这里匿名函数是 (name: string) => `Hello, ${name}!`
const greet = (name: string) => `Hello, ${name}!`;
// 2. 这里匿名函数是 num => num * 2
// 这里的return num * 2 可以简写为 num * 2
const doubled = numbers.map(num => num * 2);
简化写法的第2条,这里的return num * 2 可以简写为 num * 2
箭头函数有一种简洁的语法,当函数体只有一条表达式时:
- 可以省略
return
关键字。 - 表达式的结果会自动作为返回值。
1.4.2. Dart的匿名函数
// 鸿蒙中其实也有匿名函数:是有时候封装时的这种写法 const fn = () => {} ;
void main() {
// 1. 匿名函数
// Function f = () {
// print('我是一个匿名函数');
// };
// f();
// 2. 匿名函数作为参数 给其他函数去调用
f1(() {
print('你好;'); //这里就是入参,入参是一个函数(回调函数)
});
}
void f1(Function f) {
f();
}
1.4.3. Dart的箭头函数
// 鸿蒙里面是可以写 () => {}; 是可以写大括号的;但dart里面不能写大括号,后面就写代码就行
void main() {
// // 箭头函数
// // dart中的箭头函数后面只能写一个表达式(所以在Dart可以可能用得不多)
// Function f = () => {print('你好')};//这样写也行
// Function f = () => print('你好'); //这样写也行
// var f1 = (a, b) => {a + b}; //这样写不行,这样写输出时{}也会打印出来
// f();
// print(f1(1, 2));
// int a = sum1(1, 2);
// print(a);
print(sum2(1, 2));
}
// // 正常的写法
// sum1(a, b) {
// return a + b;
// }
// 箭头函数的写法
sum2(a, b) => a + b;
// 这样写不行,箭头函数后面只能有一句代码,也就是上面这句写法;
// sum3(a, b) => {
// return a + b;
// };
1.5. 综合案例
void main() {
//实现是否全部选中;
// 准备购物车数据
List carts = [
{"count": 2, "price": 10.0, "selected": true},
{"count": 1, "price": 30.0, "selected": true},
{"count": 5, "price": 20.0, "selected": false}
];
// bool selRes = isSelected(carts);
// print('selRes的值:$selRes');
//2. 第二种写法
bool selRes = carts.every((item) {
return item['selected'];
});
selRes == false ? print('没全部选中') : print('已经全部选中');
}
// bool isSelected(List cartsEle) {
// bool res = true;
// for (var i = 0; i < cartsEle.length; i++) {
// if (!cartsEle[i]['selected']) {
// res = false;
// }
// }
// return res;
// }