美文网首页
Flutter学习笔记1.5 Dart基础(函数 参数的多种定义

Flutter学习笔记1.5 Dart基础(函数 参数的多种定义

作者: 艾伦oy | 来源:发表于2022-04-22 00:30 被阅读0次

    Flutter学习笔记1.1 Dart基础(变量 常量 命名规则 基本类型
    Flutter学习笔记1.2 Dart基础(运算符 条件判断 类型转换)
    Flutter学习笔记1.3 Dart基础(循环语句 for,while, do...while, 多维列表循环,自增 自减 )
    Flutter学习笔记1.4 Dart基础(List Set Map,属性,数据操作))
    Flutter学习笔记1.5 Dart基础(函数 参数的多种定义方式 可选参数 默认参数 命名参数 箭头函数 匿名函数 递归 闭包))
    Flutter学习笔记1.6 Dart基础(对象 类 构造函数 类的私有化 静态 类转换 继承 ))
    Flutter学习笔记1.7 Dart基础(抽象类 多态 接口 mixins多重继承 泛型类 泛型方法 泛型接口 )
    Flutter学习笔记1.8 Dart基础(第三方库导入 使用 , Async Await.dart 延迟加载)
    Flutter学习笔记1.9 Dart基础(Dart 2.13之后的一些新特性 空类型声明符?,非空断言!,required 关键字)

    自定义函数:
    自定义函数的基本格式:

      返回类型  方法名称(参数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(); //调用方法
    }
    
    

    函数 参数的定义方式

    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、定义一个带可选参数的方法 ,最新的dart定义可选参数需要指定类型默认值

      String printUserInfo(String username,[int age=0]){  //行参
        if(age!=0){
          return "姓名:$username---年龄:$age";
        }
        return "姓名:$username---年龄保密";
      }
      print(printUserInfo('张三',21)); //实参
      print(printUserInfo('张三'));
    

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

      String printUserInfo(String username,[String sex='男',int age=0]){  //行参
        if(age!=0){
          return "姓名:$username---性别:$sex--年龄:$age";
        }
        return "姓名:$username---性别:$sex--年龄保密";
      }
      print(printUserInfo('张三'));
      print(printUserInfo('小李','女'));
      print(printUserInfo('小李','女',30));
    

    5、定义一个命名参数的方法,最新的dart定义命名参数需要指定类型默认值

      String printUserInfo(String username, {int age = 0, String sex = '男'}) {//行参
        if (age != 0) {
          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);
    

    需求
    1、定义一个方法isEvenNumber来判断一个数是否是偶数

      bool isEvenNumber(int n) {
        if (n % 2 == 0) {
          return true;
        }
        return false;
      }
    

    2、定义一个方法打印1-n以内的所有偶数

      printNum(int n) {
        for (var i = 1; i <= n; i++) {
          if (isEvenNumber(i)) {
            print(i);
          }
        }
      }
      printNum(10);
    

    匿名函数

      var printNum=(){
        print(123);
      };
      printNum();
    
      var printNum=(int n){
        print(n+2);
      };
      printNum(12);
    

    自执行方函数

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

    函数的递归

      var sum = 1;
      fn(int 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);
    

    闭包

    闭包的写法: 函数嵌套函数,并return 里面的函数,这样就形成了闭包。
    特性:
    1.常驻内存
    2.不污染全局
    比较:
    1、全局变量特点: 全局变量常驻内存、全局变量污染全局
    2、局部变量的特点: 不常驻内存会被垃圾机制回收、不会污染全局

    闭包: 函数嵌套函数, 内部函数会调用外部函数的变量或参数, 变量或参数不会被系统回收(不会释放内存)
    产生了闭包,闭包可以解决这个问题。

    /*全局变量*/
    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();
    }
    

    相关文章

      网友评论

          本文标题:Flutter学习笔记1.5 Dart基础(函数 参数的多种定义

          本文链接:https://www.haomeiwen.com/subject/dogjertx.html