美文网首页Flutter
Dart语言新特性

Dart语言新特性

作者: chilim | 来源:发表于2019-08-12 16:33 被阅读1次

    1、默认状态下,为初始化的变量值都为null
    2、箭头函数简化书写:

    bool isZero(int number) => number == 0;
    

    3、给参数增加{},以 paramName: value 的方式指定调用参数,也就是可选命名参数;
    给参数增加 [],则意味着这些参数是可以忽略的,也就是可选参数;

    // 要达到可选命名参数的用法,那就在定义函数的时候给参数加上 {}
    void enable1Flags({bool bold, bool hidden}) => print("$bold , $hidden");
    
    // 定义可选命名参数时增加默认值
    void enable2Flags({bool bold = true, bool hidden = false}) => print("$bold ,$hidden");
    
    // 可忽略的参数在函数定义时用 [] 符号指定
    void enable3Flags(bool bold, [bool hidden]) => print("$bold ,$hidden");
    
    // 定义可忽略参数时增加默认值
    void enable4Flags(bool bold, [bool hidden = false]) => print("$bold ,$hidden");
    
    // 可选命名参数函数调用
    enable1Flags(bold: true, hidden: false); //true, false
    enable1Flags(bold: true); //true, null
    enable2Flags(bold: false); //false, false
    
    // 可忽略参数函数调用
    enable3Flags(true, false); //true, false
    enable3Flags(true,); //true, null
    enable4Flags(true); //true, false
    enable4Flags(true,true); // true, true
    

    4、Dart 中并没有 public、protected、private 这些关键字,我们只要在声明变量与方法时,在前面加上“”即可作为 private 方法使用。如果不加“”,则默认为 public。不过,“_”的限制范围并不是类访问级别的,而是库访问级别。
    5、构造函数不能继承,所以超类的命名构造函数 也不会被继承。如果你希望 子类也有超类一样的命名构造函数, 你必须在子类中自己实现该构造函数。

    class Point {
    num x, y;
    // 语法糖,等同于在函数体内:this.x = x;this.y = y; 
    Point(this.x,this.y);
    

    6、调用超类构造函数
    (1、默认情况下,子类的构造函数会自动调用超类的 无名无参数的默认构造函数,
    (2、若提供了初始化参数列表,则初始化参数列表在超类构造函数执行之前执行。
    (3、构造函数执行顺序:a、initializer list(初始化参数列表)b、superclass’s no-arg constructor(超类的无名构造函数)c、main class’s no-arg constructor(主类的无名构造函数)
    (4、如果超类没有无命名无参数构造函数, 则你需要手工的调用超类的其他构造函数。 在构造函数参数后使用冒号 (:) 可以调用 超类构造函数。
    7、::联级运算符

    xxx
    ::x = 1
    ::y = 2
    ::z = 3;
    等同于xxx.x = 1, xxx.y = 2,xxx.z = 3;
    

    8、可以在构造函数体运行之前初始化实例变量,用逗号分隔初始化。
    有参构造的初始化:

    class Test1 {
      var x, y;
      Test1(var x, var y)
          : x = x,
            y = y {
        print('Test1 有参构造初始化');
      }
    }
    

    命名构造的初始化:

    class Test2{
      var x,y;
      Test2.from(Map<String, num> json)
          : x = json['x'],
           y = json['y'] {
        print('Test2.from(): ($x, $y)');
      }
    }
    

    9、MiXin(混合)使用With关键字实现接口,即扩展类。参考
    10、运算符

    ?.例如p?.name 如果p为null则跳过 
    ??=例如 a ??= value 如果a为null则将value复制给a
    ??例如a??b如果a不为null则返回a,否则返回b
    

    11、构造函数中参数是声明时定义的用this,如果是继承来的则不用this
    12、Dart是单线程语言跟js一样,没有多线程操作。可以通过isolate,每个isolate相当于一个独立的dart运行环境。

    相关文章

      网友评论

        本文标题:Dart语言新特性

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