箭头函数
- 注意:箭头函数只能写一行代码
// forEach 打印List
List list = ['苹果', '香蕉', '西瓜'];
list.forEach((value) {
print(value);
});
list.forEach((value) => print(value));
list.forEach((value) => {print(value)});
List list = [4, 1, 2, 3, 4];
// 方式一
var newList = list.map((value) {
if (value > 2) {
return value * 2;
}
return value;
});
print(newList.toList());
// 方式二
var newList = list.map((value) => value > 2 ? value * 2 : value);
print(newList.toList());
函数调用
/**
* @description: 判断一个数是否是偶数
* @param {type}
* @return:
*/
bool isEvenNumber(int n) {
if (n % 2 == 0) {
return true;
}
return false;
}
printNum(int n) {
for (var i = 1; i <= n; i++) {
if (isEvenNumber(i)) {
print(i);
}
}
}
printNum(10);
int getNum(int n) {
return n;
}
// 在main方法中调用
void main() {
print(getNum(12));
}
匿名方法
// 示例一
var printNum=(){
print(123);
};
printNum();
// 示例二
var printNum = (int n) {
print(n + 2);
};
printNum(12);
自执行方法
- ((){})() 这种格式的,匿名方法加外层加个小括号,后边在加小括号运行,就是自执行方法
((int n) {
print(n);
print('我是自执行方法');
})(12);
递归
- 原理就是自己调用自己,在合适的时机停止
// 示例一
var sum = 1;
fn(n) {
sum *= n;
if (n == 1) {
return;
}
fn(n - 1);
}
fn(5);
print(sum);
// 示例二 求1到100的和
var sum = 0;
fn(int n) {
sum += n;
if (n == 0) {
return;
}
fn(n - 1);
}
fn(100);
print(sum); // 5050
闭包
-
全局变量特点: 全局变量常驻内存、全局变量污染全局
-
局部变量的特点: 不常驻内存会被垃圾机制回收、不会污染全局
-
想实现的功能:
- 常驻内存
- 不污染全局
-
产生了闭包,闭包可以解决这个问题.....
-
闭包: 函数嵌套函数, 内部函数会调用外部函数的变量或参数, 变量或参数不会被系统回收(不会释放内存)
-
闭包的写法: 函数嵌套函数,并return 里面的函数,这样就形成了闭包。
/*全局变量*/
var a = 123;
void main() {
print(a); // 123
fn() {
a++; // a为全局变量
print(a);
}
fn(); // 124
fn(); // 125
fn(); // 126
// 局部变量
printInfo() {
var myNum = 123;
myNum++;
print(myNum);
}
printInfo(); // 124
printInfo(); // 124
printInfo(); // 124
}
// 局部变量
void main() {
printInfo() {
var myNum = 123;
myNum++;
print(myNum);
}
printInfo(); // 124
printInfo(); // 124
printInfo(); // 124
}
// 闭包
void main() {
fn() {
var a = 123; // 不会污染全局 常驻内存
return () {
a++;
print(a);
};
}
var b = fn();
b(); // 124
b(); // 125
b(); // 126
}