• 05Dart 方法


    本篇从大地老师《Dart 入门实战教程》学习整理而来。

    内置方法

    // 内置方法/函数:
    
    print();
    

    自定义方法

    // 自定义方法:
    // 自定义方法的基本格式:
    
    返回类型  方法名称(参数1,参数2,...){
      方法体
      return 返回值;
    }
    
    void printInfo(){
      print('我是一个自定义方法');
    }
    
    int getNum(){
      var myNum=123;
      return myNum;
    }
    
    String printUserInfo(){
      return 'this is str';
    }
    

    调用方法传参

    限制传入参数类型

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

    定义带可选参数的方法 中括号内是可选参数

    String printUserInfo(String username,[int age=0]){  //行参
      if(age!=0){
        return "姓名:$username---年龄:$age";
      }
      return "姓名:$username---年龄保密";
    }
    print(printUserInfo('张三',21)); //实参
    print(printUserInfo('张三'));
    
    ### 定义一个命名参数的方法
    
    ```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: '未知'));
    
    ### 把方法当做参数的方法
    
    ```dart
    //方法
    fn1() {
      print('fn1');
    }
    //方法
    fn2(fn) {
      fn();
    }
    //调用fn2这个方法 把fn1这个方法当做参数传入
    fn2(fn1);
    

    箭头函数

    注意和方法的区别: 箭头函数内只能写一条语句,并且语句后面没有分号(。要写多条语句使用大括号。

    list.forEach((value) => print(value));
    
    list.forEach((value)=>{
      print(value)
    });
    

    其他方法

    自执行方法

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

    方法的递归

    var sum = 1;
    fn(int n) {
      sum *= n;
      if (n == 1) {
        return;
      }
      fn(n - 1);
    }
    

    闭包

    1. 全局变量特点: 全局变量常驻内存、全局变量污染全局
    2. 局部变量的特点: 不常驻内存会被垃圾机制回收、不会污染全局
    • 闭包常驻内存且不会污染全局
    • 闭包: 函数嵌套函数, 内部函数会调用外部函数的变量或参数, 变量或参数不会被系统回收(不会释放内存)
    • 闭包的写法: 函数嵌套函数,并return 里面的函数,这样就形成了闭包。
    fn() {
      var a = 123; /*不会污染全局   常驻内存*/
      return () {
        a++;
        print(a);
      };
    }
    var b = fn();
    b(); // 124
    b(); // 125
    b(); // 126
    
  • 相关阅读:
    电信10兆指的是多少Mbps
    keycloak ssl-required报错问题处理
    Centos7 DNS神奇的配置
    angular4套用primeng样式
    Python库大全
    jquery根据name属性的高级选择
    Js String 属性扩展
    SQLSever 触发器
    IaaS, PaaS和SaaS
    Sql Server 基础知识
  • 原文地址:https://www.cnblogs.com/johu/p/15696561.html
Copyright © 2020-2023  润新知