箭头函数
修改数组中的数据,让数组中大于3的值乘以2
void main() {
List l = [1, 2, 3, 4, 5, 6];
var newl = l.map((e) {
if (e >= 3) {
return e * 2;
}
return e;
});
print(newl);//(1, 2, 6, 8, 10, 12)
print(newl.toList());//[1, 2, 6, 8, 10, 12]
}
使用箭头函数
void main() {
List l = [1, 2, 3, 4, 5, 6];
var newl = l.map((e) => e > 3 ? e * 2 : e); //e>3?e*2:e 三目函数 条件 ? 结果1 : 结果2
print(newl);//(1, 2, 3, 8, 10, 12)
}
箭头函数遍历打印数组
void main() {
List list = ['熊大', '熊二', 100, 1.1];
// list.forEach((element) {
// print(element);
// });
list.forEach((element) => print(element));
}
// 熊大
// 熊二
// 100
// 1.1
函数的相互调用
1、定义方法一:使用isEveryNumber来判断一个数是否是偶数
2、定义方法二:打印1-n内所有的偶数
bool isEveryNumber(int n) {
if (n % 2 == 0) {
return true;
} else {
return false;
}
}
printNum(n) {
for (int i = 1; i <= n; i++) {
if (isEveryNumber(i)) {
print(i);
}
}
}
void main() {
printNum(10);
}
// 2
// 4
// 6
// 8
// 10
匿名方法
匿名方法(Anonymous methods)匿名方法是没有名称只有主体的方法。
在匿名方法中您不需要指定返回类型,它是从方法主体内的 return 语句推断的。提供了一种传递代码块作为委托参数的技术。
匿名方法使用场景
- 需要一个临时方法,该方法使用次数极少;
- 这个方法的代码很短,甚至可能比方法声明都短。
void main() {
var printNum = () {
//将匿名方法直接赋给变量printNum
print('100');
};
printNum();
var num = (int n) {
return n * 2;
};
print(num(20));
}
//100
//40
自执行方法
自执行函数,即定义和调用合为一体。
外部无法引用它内部的变量,因此在执行完后很快就会被释放,关键是这种机制不会污染全局对象。
void main(){
((){
print("this is 自执行方法");
})();this is 自执行方法
((int n){
print(n);
})(10000);//10000
}
方法的递归
方法自己调用自己
void main(List<String> args) {
var sum = 1;
fn(int n) {
if (n == 1) {return sum; }//结束条件
sum *= n;
fn(n - 1); //递归 一个方法可以调用自身
}
fn(5);//sum=1*2*3*4*5
print(sum);///120
}
通过方法的递归 求1-100的和
void main(List<String> args) {
var sum = 0;
fn(int n) {
sum += n;
if (n == 0) {
return sum;
}
fn(n - 1);
}
fn(100);
print(sum);//5050
}
闭包
闭包就是能够读取其他函数内部变量的函数。只有函数内部的子函数才能读取局部变量,所以闭包可以理解成“定义在一个函数内部的函数“。在本质上,闭包是将函数内部和函数外部连接起来的桥梁。
闭包是一个方法(对象)
闭包定义在其他方法内部
闭包能够访问外部方法内的局部变量,并持有其状态(这是闭包最大的作用,可以通过闭包的方式,将其暴露出去,提供给外部访问)
**闭包的写法:**方法嵌套方法,并且return里面的方法。
void main(List<String> args) {
fn() {
var a = 100;
return () {
a++;
print(a);
};
}
var b = fn();
b();//101
b();//102
b();//103
}