Dart匿名方法函数和闭包
/* 内置方法/函数: print(); 自定义方法: 自定义方法的基本格式: 返回类型 方法名称(参数1,参数2,...){ 方法体 return 返回值; } */ void printInfo(){ print('我是一个自定义方法'); } int getNum(){ var myNum=123; return myNum; } String printUserInfo(){ return 'this is str'; } List getList(){ return ['111','2222','333']; } void main(){ // print('调用系统内置的方法'); // printInfo(); // var n=getNum(); // print(n); // print(printUserInfo()); // print(getList()); // print(getList()); //演示方法的作用域 void xxx(){ aaa(){ print(getList()); print('aaa'); } aaa(); } // aaa(); 错误写法 xxx(); //调用方法 }
//调用方法传参 main() { //1、定义一个方法 求1到这个数的所有数的和 60 1+2+3+。。。+60 /* int sumNum(int n){ var sum=0; for(var i=1;i<=n;i++) { sum+=i; } return sum; } var n1=sumNum(5); print(n1); var n2=sumNum(100); print(n2); */ //2、定义一个方法然后打印用户信息 // String printUserInfo(String username,int age){ //行参 // return "姓名:$username---年龄:$age"; // } // print(printUserInfo('张三',20)); //实参 //3、定义一个带可选参数的方法 // String printUserInfo(String username,[int age]){ //行参 // if(age!=null){ // return "姓名:$username---年龄:$age"; // } // return "姓名:$username---年龄保密"; // } // // print(printUserInfo('张三',21)); //实参 // print(printUserInfo('张三')); //4、定义一个带默认参数的方法 // String printUserInfo(String username,[String sex='男',int age]){ //行参 // if(age!=null){ // return "姓名:$username---性别:$sex--年龄:$age"; // } // return "姓名:$username---性别:$sex--年龄保密"; // } // print(printUserInfo('张三')); // print(printUserInfo('小李','女')); // print(printUserInfo('小李','女',30)); //5、定义一个命名参数的方法 // String printUserInfo(String username,{int age,String sex='男'}){ //行参 // if(age!=null){ // return "姓名:$username---性别:$sex--年龄:$age"; // } // return "姓名:$username---性别:$sex--年龄保密"; // } // print(printUserInfo('张三',age:20,sex:'未知')); //6、实现一个 把方法当做参数的方法 // var fn=(){ // print('我是一个匿名方法'); // }; // fn(); //方法 fn1(){ print('fn1'); } //方法 fn2(fn){ fn(); } //调用fn2这个方法 把fn1这个方法当做参数传入 fn2(fn1); }
void main(){ /*需求:使用forEach打印下面List里面的数据*/ // List list=['苹果','香蕉','西瓜']; // list.forEach((value){ // print(value); // }); // list.forEach((value)=>print(value)); // list.forEach((value)=>{ // print(value) // }); /*需求:修改下面List里面的数据,让数组中大于2的值乘以2*/ 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()); /* 需求: 1、定义一个方法isEvenNumber来判断一个数是否是偶数 2、定义一个方法打印1-n以内的所有偶数 */ //定义一个方法isEvenNumber来判断一个数是否是偶数 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; } 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); }
/* 闭包: 1、全局变量特点: 全局变量常驻内存、全局变量污染全局 2、局部变量的特点: 不常驻内存会被垃圾机制回收、不会污染全局 /* 想实现的功能: 1.常驻内存 2.不污染全局 产生了闭包,闭包可以解决这个问题..... 闭包: 函数嵌套函数, 内部函数会调用外部函数的变量或参数, 变量或参数不会被系统回收(不会释放内存) 闭包的写法: 函数嵌套函数,并return 里面的函数,这样就形成了闭包。 */ */ /*全局变量*/ var a=123; void main(){ // print(a); // fn(){ // a++; // print(a); // } // fn(); // fn(); // fn(); //局部变量 // printInfo(){ // var myNum=123; // myNum++; // print(myNum); // } // printInfo(); // printInfo(); // printInfo(); //闭包 fn(){ var a=123; /*不会污染全局 常驻内存*/ return(){ a++; print(a); }; } var b=fn(); b(); b(); b(); }
最后,关注【码上加油站】微信公众号后,有疑惑有问题想加油的小伙伴可以码上加入社群,让我们一起码上加油吧!!!
posted on 2019-06-15 10:08 LoaderMan 阅读(1597) 评论(0) 编辑 收藏 举报