Dart函数
自定义方法:
自定义方法的基本格式:
返回类型 方法名称(参数1,参数2,...){
方法体
return 返回值;
}
void 表示没有返回值
void printInfo(){
print('我是一个自定义方法');
}
int getNum(){
var myNum=123;
return myNum;
}
String printUserInfo(){
return 'this is str';
}
定义一个带可选参数的方法
// String printUserInfo(String username,[int age]){ //行参
// if(age!=null){
// return "姓名:$username---年龄:$age";
// }
// return "姓名:$username---年龄保密";
// }
// // print(printUserInfo('张三',21)); //实参
// print(printUserInfo('张三'));
定义一个带默认参数的方法
// 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);
//匿名方法
// 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);
}
箭头函数,没有分号,只能有一行代码
// list.forEach((value)=>{
// print(value)
// });
闭包:
1.常驻内存
2.不污染全局
产生了闭包,闭包可以解决这个问题.....
闭包: 函数嵌套函数, 内部函数会调用外部函数的变量或参数, 变量或参数不会被系统回收(不会释放内存)
闭包的写法: 函数嵌套函数,并return 里面的函数,这样就形成了闭包。
//闭包
fn(){
var a=123; /*不会污染全局 常驻内存*/
return(){
a++;
print(a);
};
}
var b=fn();
b();
b();
b();