# 函数
# 函数定义
自定义方法:
返回类型 方法名(参数1,参数2,...){
    方法体;
    return 返回值;//与返回类型保持一致
}
比如main方法:
void main(){
  print('Hello Dart.');
}
我们一般自定义一个方法,可在main中调用:
void printMsg(String msg){
  print('自定义方法 $msg');
}
main(){
  printMsg('Hello Dart.');
}
//自定义方法 Hello Dart.
# 可选参数
可选参数使用中括号[]括起来,放在参数列表末尾,可以是多个,例如:
void printUsrInfo(String name,[int age]){
  if(age!=null)
  print('姓名: $name,年龄:$age');
  else
  print('姓名: $name,年龄:未知');
}
main(){
  printUsrInfo('张三',23);
  printUsrInfo('李四');
}
//姓名: 张三,年龄:23
//姓名: 李四,年龄:未知
# 默认参数
同可选参数一样,默认参数也写在中括号中,并且写在可选参数前,赋有默认值,则此参数如果不传,默认使用该默认值。
void printUsrInfo(String name,[String sex = '男',int age]){
  if(age!=null)
  print('姓名: $name,年龄:$age,性别:$sex');
  else
  print('姓名: $name,年龄:未知,性别:$sex');
}
main(){
  printUsrInfo('张三','男',23);
  printUsrInfo('李四','女');
}
//姓名: 张三,年龄:23,性别:男
//姓名: 李四,年龄:未知,性别:女
# 命名参数
命名参数用大括號{},调用传参时使用类似于键值对传入,如:
void printUsrInfo(String name,{String sex = '男',int age}){
  if(age!=null)
  print('姓名: $name,年龄:$age,性别:$sex');
  else
  print('姓名: $name,年龄:未知,性别:$sex');
}
main(){
  printUsrInfo2('张三',age:20,sex:'未知');
}
//姓名: 张三,年龄:20,性别:未知
把方法当做参数
var fn = () {
  print('我是一个匿名方法');
};
//方法
fn1() {
  print('fn1');
}
//方法
fn2(fn) {
  fn();//这里的 fn 是参数 fn,不是上面的函数 fn
}
main() {
  //调用fn2这个方法 把fn1这个方法当做参数传入
  fn2(fn1);//fn1
}
# 箭头函数
箭头函数函数体只能一行代码。
  List list = ['Apple', 'HuaWei', 'Samsung'];
  //遍历
  list.forEach((value) {
    print(value);
  });
  //箭头函数
  list.forEach((value)=>{
    print(value)
  });
  list.forEach((value)=>print(value));
map函数,一数组,单数乘2,偶数不变。
  List list2 = [1, 2, 3, 4, 5, 6, 7];
  var newList = list2.map((value) {
    if (value % 2 == 1) {
      return value * 2;
    }
    return value;
  });
  print(newList.toList());
  //[2, 2, 6, 4, 10, 6, 14]
  //箭头函数改写
  var newList2 = list2.map((value) => value % 2 == 1 ? value * 2 : value);
  print(newList2.toList());
# 匿名函数
  var printNum = (int num){
    print(num);
  };
  printNum(123+32);
# 自执行方法
已运行自动执行。
((){
  print('自执行方法');
})();
# 闭包函数
- 全局变量 常驻内存,污染全局
 - 局部变量 不常驻内存,会被垃圾回收机制回收,不会污染全局
 
闭包:函数嵌套函数,内部函数会调用外部函数的变量的参数,变量会参数不会被系统回收
闭包写法:函数嵌套函数,并return里面函数,形成闭包。
  fun() {
    var a = 1;
    return () {
      a++;
      print(a);
    };
  }
  var b = fun();
  b();b();b();
  //2
  //3
  //4
← 集合 List Set Map 类与对象 →