dart综述

222 阅读4分钟
Flutter 使用 Dart 语言开发,主要有以下几点原因:


(1). Dart 一般情况下是运行 DartVM 上,但是也可以编译为 ARM 代码直接运行在硬件上。

(2). Dart 同时支持 AOT 和 JIT 两种编译方式,可以更好的提高开发以及 App 的执行效率。  Dart 可以利用独特的隔离区(Isolate)实现多线程。而且不共享内存,可以实现无锁快速分配。

(3). 分代垃圾回收,非常适合 UI 框架中常见的大量 Widgets 对象创建和销毁的优化。在为创建的对象分配内存时,Dart 是在现有的堆上移动指针,保证内存的增长是程线性的,于是就省了查找可用内存的过程。

(4). Dart为google所有,能够得到很好的支持,针对APP与Web有很多的优化。
注:Dart针对web与服务端开发都有所表现

特性( JIT/AOT/单线程模型/内存分配/垃圾回收)


Dart是面向对象的语言,大部分特性和java类似,在java的基础上吸收了js的特性。Dart在静态语法方面和Java非常相似,如类型定义、函数声明、泛型等,而在动态特性方面又和JavaScript很像,如函数式特性、异步支持等。除了融合Java和JavaScript语言之所长之外,Dart也具有一些其它具有表现力的语法,如可选命名参数、..(级联运算符)和?.(条件成员访问运算符)以及??(判空赋值运算符)。
信息表达
顶层都是继承Object


变量
var : 可以赋值任何类型,但一旦赋值,类型便已确定,不可再赋值其他类型(第一次赋值时才有类型推断)。
num:java中的int,double ,只有这两种类型
String,bool
未初始化变量的值都是 null

函数
1.方法可以作为参数传递
2.方法可以作为变量使用
3.dart中无方法重载,通过可选参数(可选命名参数 可选位置参数) 来处理
可选命名参数定义: functionName({String name,num age,bool isTrue}){}
使用: functionName(name: “whq);
使用: functionName(name: “whq”,age:20);
可选位置参数定义:functionName([String name,num age,bool isTrue]){}
使用: functionName(“whq”,age,true);
使用: functionName(“whq”,age);
异同:两种形式都是参数可选的表达,主要的不同还是一个是可以根据命名来指定某个参数的赋值,一个是根据参数位置来指定某个参数的赋值。


Dart中的类使用class定义,并没有public, protected,private。
变量/方法也是没有这类限定符,如果表示该方法,该变量是私有,使用“_”表示,
如:_functionName(), num _userAge;
注意:“_”的限制范围并不是类访问级别的,而是库访问级别

复用
Dart中的复用有继承(extends),实现(implements)以及混入(Mixin),混入是dart的语言特性,我的 理解就是“借用”,想用某个类的属性或者方法,关键字是with。
Dart中的实现并没有interface,就是class。
在 Dart 中,你可以对同一个父类进行继承或接口实现
继承父类意味着,子类由父类派生,会自动获取父类的成员变量和方法实现,子类可以根据需要覆写父类的构造函数和方法。
接口实现则意味着,子类获取到的仅仅是接口的成员变量符号和方法符号,子类需要对成员变量符号进行重写以及方法进行声明和重写。
复用的顺序是: extends -> mixins -> implements
基本的运算符(优先级:上行>下行 左列>右列)


支持运算符重写




独有运算符


AA?.name ///表示如果AA对象如果为空,则跳过,避免空指针
AA ?? "999" ///表示如果 AA 为空,返回999
AA ??= “999” ///表示如果 AA 为空,给 AA 设置成 999
dart 相关地址:
http://dart.goodev.org/guides/language/language-tour
Mixin 详解:

异步

Future
使用future作为返回值来处理异步结果
Async/await
Async用来修饰函数,await修饰异步操作。用来消除回调地狱,代码可读性更强。
(dart最终仍会转化为future调用链来处理)
Stream
Stream 也是用于接收异步事件数据,和Future 不同的是,它可以接收多个异步操作的结果(成功或失败)