发文时间:2021年03月04日 01:21:24 编辑:Aaron 标签:记录Dart语言的学习历程 465
Dart是谷歌开发的计算机编程语言,后来被Ecma (ECMA-408)认定为标准。它被用于web、服务器、移动应用和物联网等领域的开发。
int Quan=1000;//这个是全局变量 void main() { //拓展作业 定义一个匿名方法 var Niming=(){ print('我是一个匿名方法 就是()里不带参'); }; Niming();//输出 我是一个匿名方法 就是()里不带参 (也可带参) //自执行方法 《先一对括号 后而在第一个括号里 写方法》 ((){ print('我是一个自执行方法 我自己会动!');//我是一个自执行方法 我自己会动! })(); //自执行方法带参操作 ((data){ print('自执行方法也可以带参数的 $data');//自执行方法也可以带参数的 data=这个是参数 })('data=这个是参数'); //递归 假设 需要求 1-100的累积和 var zong=0; int leijia(int n){ zong+=n; if(n==1){ //重在让递归停止 写好条件让其return return ; } leijia(n-1);//再次调用 } leijia(100); print(zong);//输出5050 /* 闭包 1、全局变量 写在main以外的变量 为全局变量 会常驻内存 还会导致影响全局的变量 2、局部变量 写在main以内的变量,也是方法内的变量 不会常驻内存 会被回收机制销毁 也不会污染全局 需求: 假设想实现 能常驻内存 但是不会污染全局的变量 那就得用闭包 (Quan在第一行代码) */ //全局变量 - 会存在被污染的情况 fn(){ Quan++; print(Quan); } fn();//调用一次 让全局变量 自增1 输出1001 fn();//调用一次 让全局变量 自增1 输出1002 fn();//调用一次 让全局变量 自增1 输出1003 //如果其他地方调用的话 那就是1003了 按最后那个值为准 int newnum=Quan; print(newnum);//这里就是1003了 会脏数据 会影响其他函数的调用 //局部变量 - 则不存在这个问题 judata(){ var a1=100; a1++; print(a1); } judata();//输出101 judata();//输出101 始终输出101 因为局部变量不会受到影响 print('--------------分隔线-------------------'); //开始闭包 实战写法 (方法里面嵌套方法 并且返回这个方法) bbao(){ var b=123; return(){ b++; print(b); }; }; var c=bbao(); c();//输出124 c();//输出125 c();//输出126 实现了 常住内存 又不会污染全局 /** 适合需要调用累加的时候 每次都会累积操作 方法会记录前一次的值 不会影响全局 就好比 1+1等于2 a=2 时,再来操作这个a+1 那么就是 2+1等于3,下一次请求再来的时候 那就是 3+1 让变量常驻内存 不污染全局 */ }
void main() { //如指定一个int类型的方法 int GetNum(int n){ return n; }; //调用 var n1=GetNum(666);//只能传入int类型 且如若不是 会报错 因为在传参哪儿已规定要int类型的 print(n1);//输出6666 //如指定一个String类型的方法 String GetString(String s){ return s; }; //调用 var s1=GetString('我是字符串'); print(s1);//输出我是字符串 //设置可为空的参数方法 参数可传 可不传 String test(String name,[int age]) { if(age ==null){ return ("我叫 $name --- 但是我的年龄不告诉你"); } return ("我叫 $name --- 我的年龄是 $age"); } print(test('张三'));//输出我叫 张三 --- 但是我的年龄不告诉你 print(test('张三',18));//我叫 张三 --- 我的年龄是 18 //设置默认参数 String DataInfo(String name,[int age=10]){ return "$name --- $age"; } print(DataInfo('小刘'));//小刘 --- 10 print(DataInfo('小刘',20));//小刘 --- 20 //设置指定参数 String getData(String name,{int age,int younum,int mynum}){ return "我的名字$name --- 我的age$age--- 我的younum$younum--- 我的mynum$mynum"; } //形参 (指定的参数可以打乱顺序传参 只要格式没错就可以) print(getData('涓涓',age:20,younum:60));//我的名字涓涓 --- 我的age20--- 我的younum60--- 我的mynumnull print(getData('小刘爱涓涓',younum:20,age:60));//我的名字小刘爱涓涓 --- 我的age60--- 我的younum20--- 我的mynumnull print('----------------------我是分隔线----------------------'); //实现一个 把方法当做参数的方法 var fn=(){ print('我是一个匿名方法'); }; var fn2=(data){ data(); print('成功调用'); }; //调用fn2这个方法 把fn这个方法当做参数传入 fn2(fn); }
//箭头函数的使用 可代替forEach和三元判断符等 //假设让下面数组内的value打印出来 按forEach的话 那就是 var list=['苹果','香蕉','西瓜']; list.forEach((value){ print(value); });//会依次输出 苹果 香蕉 西瓜 //让箭头来写的话 那就是 list.forEach((value)=>print(value));//会依次输出 苹果 香蕉 西瓜 //箭头函数 不用加封号 只能写一句话 也可写三元运算符 箭头函数三元运算符 List data=[1,2,4,5,6,7,8]; //把data数组中 大于等于4的值*2 var a1=data.map((value){ if(value>=4){ return value*2; } return value; }); print(a1);//(1, 2, 8, 10, 12, 14, 16) //箭头函数 实现把data数组中 大于等于4的值*2 var jdata=data.map((value)=>value>=4?value*2:value); print(jdata); //输出(1, 2, 8, 10, 12, 14, 16)
void main() { //拓展作业 定义一个可以识别当前参数是否为偶数的方法 返回布尔值 bool IsOushu(int n){ if(n%2==0){ return true; } return false; } // print(IsOushu(2));//返回true //定义一个方法 可以打印 1 -n以内的所有偶数 ,嵌套方法处理(用上IsOushu) int intData(int n){ for(int i=1;i<=n;i++){ bool isOU=IsOushu(i); if(isOU==true){ print(i); } } } intData(10);//输出 2 4 6 8 10
若无特殊说明,此文章为博主原创。 写稿不易,如需转载,请注明出处: https://www.aaroner.cn/art/39.html
Dart系列(七) Dart 匿名方法和自执行方法、闭包、箭头函数等
发文时间:2021年03月04日 01:21:24 编辑:Aaron 标签:记录Dart语言的学习历程 465
Dart是谷歌开发的计算机编程语言,后来被Ecma (ECMA-408)认定为标准。它被用于web、服务器、移动应用和物联网等领域的开发。
自执行方法 匿名方法 闭包等
方法传参 默认传参 指定传参等
箭头函数
拓展作业
若无特殊说明,此文章为博主原创。
写稿不易,如需转载,请注明出处: https://www.aaroner.cn/art/39.html