Flutter学习-dart(5):dart函数

1. dart函数声明和使用

1.1 函数分类

  • 内置函数
  • 自定义函数

1.2 定义函数

//自定义方法的基本格式:

返回类型  方法名称(参数1,参数2,...){
    方法体
    return 返回值;
}

2. 参数定义

2.1 定义一个方法 求1到这个数的所有数的和

 int sumNum(int n){
      var sum=0;
      for(var i=1;i<=n;i++) {
        sum+=i;
      }
      return sum;
} 

2.2 定义一个方法然后打印用户信息

String printUserInfo(String username,int age){  //行参
     return "姓名:$username---年龄:$age";
 }

2.3 定义一个带可选参数的方法

  String printUserInfo(String username,[int age]){  //行参
      if(age!=null){
         return "姓名:$username---年龄:$age";
      }
      return "姓名:$username---年龄保密";
}

2.4 定义一个带默认参数的方法

 String printUserInfo(String username,[String sex='男',int age]){  //行参

   if(age!=null){
     return "姓名:$username---性别:$sex--年龄:$age";
   }
   return "姓名:$username---性别:$sex--年龄保密";
 }

2.5 定义一个命名参数的方法

  String printUserInfo(String username,{int age,String sex='男'}){  //行参

      if(age!=null){
        return "姓名:$username---性别:$sex--年龄:$age";
      }
      return "姓名:$username---性别:$sex--年龄保密";

  }

2.6 实现一个 把方法当做参数的方法

  //方法
  fn1(){
    print('fn1');
  }

  //方法
  fn2(fn){
    fn();
  }

  //调用fn2这个方法 把fn1这个方法当做参数传入
  fn2(fn1);

3. 函数的作用域

  • 局部作用域
  • 全局作用域
List getList() {
  return ['111', '2222', '333'];
}

main() {
  //演示方法的作用域
  void xxx() {
    aaa() {
      print(getList());
      print('aaa');
    }

    aaa();
  }

  // aaa();  错误写法
  xxx(); //调用方法
}

4. 箭头函数

example

//1. 需求:使用forEach打印下面List里面的数据

List list=['苹果','香蕉','西瓜'];
list.forEach((value)=>print(value));

//2. 修改下面List里面的数据,让数组中大于2的值乘以2
List list2=[4,1,2,3,4];
var newList=list2.map((value)=>value>2 ? value*2 : value);

5. 匿名方法

example

var printNum = () {
   print(123);
};
printNum();

6. 自执行方法(和js差不多)

example

 ((int n){
   print(n);
   print('我是自执行方法');
 })(12);

7. 闭包(原理和js一样)

  • 全局变量特点: 全局变量常驻内存、全局变量污染全局
  • 局部变量的特点: 不常驻内存会被垃圾机制回收、不会污染全局
  • 想实现的功能: (采用闭包解决)
    1. 常驻内存
    2. 不污染全局

7.1 对闭包的理解

  1. 函数嵌套函数, 内部函数会调用外部函数的变量或参数, 变量或参数不会被系统回收(不会释放内存)
  2. 闭包的写法: 函数嵌套函数,并return 里面的函数,这样就形成了闭包

7.2 闭包示例:

fn() {
  var a = 123; /*不会污染全局   常驻内存*/
  return () {
    a++;
    print(a);
  };
}

main() {
  Function b = fn();
  b(); //124

  b(); //125

  b(); //127
}
上一篇:flutter购物车


下一篇:Flutter: 为字体增加渐变色描边