基本语法
重要概念
一切皆对象(Object),数字、函数、null等
类型推断
支持泛型
支持顶层函数和顶层变量,和kotlin一样
没有public、protocted、private修饰符。如果以_开头,代表对库可见
Dart 2中构造方法new是可选的
变量
使用var声明的变量类型推断后,不能修改类型
dynamic或Object声明的变量后面可以修改类型。(吊炸天)
默认值
没有初始化的变量的默认值都是null,哪怕你是number,这点和很多语言都不一样哦。
Final和Const
如果一个变量永远不改变,那么可以使用final和const。final变量只能被设置一次,const变量是编译时常量,隐试final。
const不仅可以修饰变量,也可以修改值。(这个和c++一样)
Map
函数
[]表示参数可选
{}命名参数
=使用默认值,必须是编译时常量,否则null
Exceptions
Dart中所有的异常都是非受检异常。
throw是个表达式,不仅可以抛异常,还能抛其他任意对象。
需要处理指定异常类型时使用on;使用catch处理Exception
catch可以指定多个参数,catch(e,s),e代表Exception对象,e代表StackTrace对象
处理完异常,再抛出时使用rethrow关键字。
Classes
?.
调用构造方法
Dart 2中new是可选的
在一个constant上下文中,const是可以省略的。
获取对象的类型
runtimeType参数,返回Type对象
实例变量
实例变量生成getter方法,非final实例生成get和set方法。
构造方法
默认构造方法都是有的;
默认构造方法就是名称和类名一样的,剩下的就需要使用命名构造方法。
命名构造方法
常构造方法
实例变量需要是final的。
工厂构造器
当构造方法不是每次都创建实例时,可以使用factory关键字进行标记。
factory构造器没有this访问符
抽象方法
;代替方法体即可。
每个类有个隐试的接口,神奇吧?
重载运算符
Dart支持重载运算符
如果重载了==,那么也要重载hashCode
noSuchMethod()
Object有noSuchMethod()方法,子类可以重载该方法,当调用没有的属性或方法时将会调用该方法。
枚举类
类变量和方法
static关键字
泛型
集合字面量
泛型方法
异步支持
为了使用await,代码必须要在一个async的函数中。
声明异步函数
使用了async关键字,那么函数返回得是Future类型.
处理流
当需要从流中获取值时,有两种方法: 1. 使用async和一个异步的循环(await for) 2. 使用Stream API
Generators
当你想生成一序列的值时:
Synchronous Generator:返回Iterable对象
Asynchronous Generator:返回Stream对象
sync*标记函数,yield声明发布值
如果generator是递归的,那么可以使用yield*进行优化。
Callable类
为了让你的类可以像函数一样被调用,使用call()方法。
Last updated