Dart

 

这是摘要

[TOC]

Usage

class

  • 所有修饰默认为公有,但是没有public这些关键字

  • _开头修饰为私有

  • main()在类外部,内部识别不到

  • Bicycle(this.cadence, this.speed, this.gear);
    

    等价于

    Bicycle(int cadence, int speed, int gear) {
      this.cadence = cadence;
      this.speed = speed;
      this.gear = gear;
    }
    
  • 默认的toString()只给出类型信息

  • string中使用$value插值

  • 使用=>简写单行函数体

  • 属性拥有默认的settergetter,除非显示地声明

  • 使用const修饰构造函数,如果传入的参数相同,得到的对象为同一个常量,反之不是;在使用时也需要加const

  • 构造函数不会被继承

  • 命名构造函数,例如

    class Point {
      num x, y;
      
      Point(this.x, this.y);
      
      // 命名构造函数
      Point.origin() {
        x = 0;
        y = 0;
      }
    }
    

optional parameters

  • 不支持同名函数重载

  • 带默认值参数用花括号,例如

    // This constructor uses optional named parameters.
    Rectangle({this.origin = const Point(0, 0), this.width = 0, this.height = 0});
    

factory

  • 使用factory修饰工厂构造函数,可以返回一个实例。例如

    abstract class Shape {
      factory Shape(String type) {
        if (type == 'circle') return Circle(2);
        if (type == 'square') return Square(2);
        throw 'Can\'t create $type.';
      }
      num get area;
    }
    

interface

  • 没有interface关键字,使用implement时,获得其所有字段和方法,但与extends不同,需要一一实现

functional programming

  • 函数拥有类型Function

  • 如果方法名为call,可以直接通过对象调用。例如

    class A {
        call(String a, String b, String c) => '$a $b $c!';
    }
      
    main() {
        var wf = new A();
        var out = wf("Hi","there,","gang");
        print('$out');
    }
    
  • 集合类拥有类似stream的函数式操作

async/await

null operator

  • ?? expr1??expr2 <==> expr1 == null ? expr2 : expr1
  • ?. expr1?.expr2 <==> expr1 != null ? expr2 :