语法基础
-
Dart的主函数名称为 void main (){ },也可以添加参数,main(List args)
-
Dart里的变量、函数、getter和setter可以独立于类存在,main方法位于最顶层。
-
Dart中的修饰符默认是public的,且没有类似public、private和protected的修饰符。
在标识符前加下划线_ ,可以使得其变成private的,如下可以对变量加getter方法使其可读,对于public的成员变量,默认有隐式的setter和getter,getter方法定义:直接在标识符前加get,调用时直接用定义的标识符;
int _speed = 0;
//通过修改其名称并添加一个getter,使private变量可读
int get speed => _speed;
调用时: A.speed
- Dart的构造函数可以没有函数体,类似下面:
Bicycle(this.cadence, this.speed, this.gear);
其中this.cadence是简写,可以直接把参数赋值给成员变量,可选参数用{ }括起来,可以赋初始值,如下所示:
Bicycle(int cadence, int speed, int gear) {
this.cadence = cadence;
this.speed = speed;
this.gear = gear;
}
Rectangle({this.origin = const Point(0, 0), this.width = 0, this.height = 0});
- 对象的创建
在Dart 2之后,可以省略new关键字,定义变量时,由于类型推断,所以可以不写类型
var bike = new Bicycle(2, 0, 1);
可简化为:
var bike = Bicycle(2, 0, 1);
- 如果您知道变量的值不会更改,则可以使用final而不是var
- Dart中可以时候单引号或者双引号来声明字符串String
- 可以类似Kotlin一样,使用${表达式}的形式或者 $变量名 的形式来引用值
- 单函数表达式要使用 => 箭头
- Dart内置了一些常用的异常类,也可以自定义一个类继承自Exception类,或者可以直接抛出一个字符串的异常信息,如下:
Shape shapeFactory(String type) {
if (type == 'circle') return Circle(2);
if (type == 'square') return Square(2);
throw 'Can\'t create $type.';
}
- Dart中的工厂模式
工厂模式相比直接对象实例化的一些好处:可以隐藏实例化的细节;提供返回一个相应基类的子类对象;并且可以选择使用一个已有的对象而不是创建一个新的对象;…
Dart 使用关键字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;
}
- Dart中没有interface关键字,因为所有类都定义了一个interface(every class defines an interface),继承一个类使用implements关键字
- Dart支持函数式编程,常用的如集合的操作,如下:
String scream(int length) => "A${'a' * length}h!";
main() {
final values = [1, 2, 3, 5, 10, 50];
//非函数式写法
for (var length in values) {
print(scream(length));
}
}
//函数式写法
values.skip(1).take(3).map(scream).forEach(print);