Dart语法基础1-类、构造函数

语法基础

  • 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);
发布了82 篇原创文章 · 获赞 86 · 访问量 11万+

猜你喜欢

转载自blog.csdn.net/unicorn97/article/details/98079806