《Dart编程语言》读书笔记

  1. Dart是由谷歌出品的,开始旨在取代javascript,能够运行于浏览器的小众语言。然而TypeScript已经占领了这一领域。

  2. Flutter和飞鲨系统的出现,推进了Dart的发展。

  3. Dart语法即像Java又类似于javascript。这与语言的设计思路有关,作者希望开发者可以快速上手。

  4. Dart的一切都是对象,甚至函数都是对象,可以类比javascript。

   library mymoudle;
   import 'dart:math';
   
   class Point /* extends Object */ {
     var rho, theta;
     
     Point(this.rho, this.theta);
     Point(a,b) {
       rho = sqrt(a*a + b*b);
       theta = atan(a/b);
     }
     
     get x => rho * cos(theta);
     set x(newX) {
       rho = sqrt(newX*newX + y*y);
       theta = acos(newX/rho);
     }
     
     scale(factor) => new Point(rho*factor, theta);
     operator + (p) => new Point(x + p.x, y + p.y);
     
     static distance(p1, p2) {
       return 1;
     }
   }

  1. Dart可以编译成机器码、字节码、js代码,类似于Kotlin。

  2. Dart的一大特色就是可选类型,可以与TypeScript做类比。本质上它是动态类型语言,但是又对静态类型做了支持。类型问题不会导致编译失败,IDE只会给出提示,运行时检查失败。这是一种折中设计,个人认为很高明。

   var number = 10;
   var str = "name";
   // the complier just gives the warnig.
   print(str + number);

  1. Dart的数字类型系统像是Java的BigInteger,没有长度限制(编译为js是一个特例)。

  2. Dart以模块为基本单元,类似Swift。核心库被隐含的导入。

   library mymoudle;
   import 'dart:math';
  1. 单继承,默认继承Object类。

  2. 支持setter getter

    class Demo extends Object {
    	get info => this.info;
    }
    
    var demo = new Demo();
    print(demo.info);

  1. 所有变量如实例变量,局部变量,全局变量,在没有初始化时都会被赋值为null。null也是一个对象,是Null类的唯一实例。

  2. 所有暴漏的字段都不是直接访问的,都是调用编译器生成的getter、setter,类似于Swift。

  3. 通Java一样支持默认的构造函数,也即构造函数可以缺省。

  4. Dart mixin

  5. Dart sync*