箭头函数
1、使用forEach打印下面的List中的数据
void main(List<String> args) {
List list = ["AA", "BB", "CC"];
list.forEach((element) {
print(element);
});
//使用箭头函数
//学过Kotlin的,有没有觉得像lambda表达式啊
list.forEach((element) => print(element));
list.forEach((element) => {print(element)});
}
2、修改下面List里面的数据,让数组中大于2的值*2
void main(List<String> args) {
List list2 = [4, 1, 2, 3, 4];
var newList = list2.map((e) {
if (e > 2) {
return e*2;
}
return e;
});
print(newList.toList());
//通过箭头函数以及三目运算来实现
var newList2 = list2.map((e) => e>2?e*2:e);
print(newList2.toList());
}
函数的相互调用
void main(List<String> args) {
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);
}
匿名方法
匿名方式的使用方式和传参方式和普通方法是一样的
void main(List<String> args) {
var printNum=(int n){
print(n+2);
};
printNum(13);//15
}
自执行方法
程序一跑起来就会自动执行 不需要调用
void main(List<String> args) {
((int n){
print(n);
print("我是一个自执行方法");
})(16);
}//这里的写法要记住哦,括号还是挺多的
方法的递归
void main(List<String> args) {
/其实就是方法自己调用自己
//1、计算一个数的阶乘
var sum = 1;
fn(int n){
sum *= n;
if (n == 1) {
return;
}
fn(n-1);
}
fn(5);
print(sum);
//2、通过方法的递归求1-100的和
var sum1 = 0;
fnSum(int n){
sum1 +=n;
if (n==0) {
return;
}
fnSum(n-1);
}
fnSum(100);
print(sum1);//5050
}
闭包
1、全局变量特点:全局变量常驻内存,全局变量污染全局
2、局部变量的特点:不常住内存,会被垃圾回收机制回收、不会污染全局
主要解决问题:
1、常驻内存
2、不污染全局
产生了闭包,闭包可以解决这个问题
闭包:函数嵌套函数,内部函数会调用外部函数的变量或者参数,变量或者参数不会系统回收
闭包的写法:函数嵌套函数,并return里面的函数,这就形成了闭包
var a = 123;//全局变量,会常驻内存
void main(List<String> args) {
print(a);
fn(){
a++;
print(a);//在fn方法也能调用到
}
fn();//123
fn();//124
}
局部变量
void main(List<String> args) {
printInfo(){
var b = 123;//局部变量,只在该方法内有效
b++;
print(b);
}
printInfo();//124
printInfo();//124
}
闭包
fnaa(){
var aa = 123;
return(){
aa++;
print(aa);
};
}
var bb = fnaa();//表示执行fnaa
bb();//124
bb();//125
bb();//126
//主要可以是变量常驻内存且不污染全局
记录Dart学习,谢谢!